Understanding JavaScript Libraries via React and the React Ecosystem
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Part Number | 37 | |
Number of Parts | 48 | |
Author | ||
Contributors | ||
License | CC Attribution - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/33174 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
DjangoCon US 201737 / 48
2
5
6
14
16
23
26
30
31
32
34
39
43
48
00:00
Binary codeComputer animation
00:30
SoftwareCycle (graph theory)Computer fontSoftware frameworkInformation technology consultingAuthorizationProcess (computing)SatelliteBitGenderQuicksortSeries (mathematics)Forcing (mathematics)Hydraulic jumpClient (computing)Scripting languageWebsiteWordWeb 2.0SoftwareCycle (graph theory)Formal languageComputer programmingImage resolutionPoint cloudVideoconferencingMereologyPublic key certificateSoftware testingComputer font2 (number)Projective planeMachine learningComputer animation
02:25
QuicksortMoment (mathematics)Multiplication signRight angleLevel (video gaming)Goodness of fit
03:03
Software frameworkWebsiteJava appletElectronic mailing listFigurate numberClient (computing)MereologyScripting languageProjective planeDivergenceComputer programmingMobile appComputer animation
03:44
SoftwareSoftware frameworkCommunications protocolComputerCross-site scriptingCodeSoftware frameworkSoftwareData conversionComputerDebuggerCartesian coordinate systemEndliche ModelltheorieRight angleWebsiteComputer animation
04:37
World Wide Web ConsortiumNetscapeInternet ExplorerPhotographic mosaicDOM <Programmierumgebung>Graph (mathematics)Vertex (graph theory)Content (media)Data structureAnalogyView (database)Data modelCross-site scriptingFormal languageWeb browserNumbering schemeJava appletPrototypeInheritance (object-oriented programming)Electronic visual displayEvent horizonMereologyReading (process)Computer programmingSeries (mathematics)Different (Kate Ryan album)Different (Kate Ryan album)Web browserPoint (geometry)Core dumpSocial classObject-oriented programmingSpecial unitary groupProgramming languageReal numberInternetworkingCodeRevision controlComputer programmingFormal languageQuicksortCollaborationismAnalogyBitSoftware developerMultiplication signExistenceDuality (mathematics)Content (media)Data structureEvent horizonWordCartesian coordinate systemJava appletInheritance (object-oriented programming)Covering spaceFront and back endsImplementationVideoconferencingView (database)Numbering schemeSign (mathematics)AdditionSoftware frameworkFood energyArithmetic progressionProcess (computing)Right anglePhotographic mosaicPrototypeScripting languageMereologySineElement (mathematics)State of matterEndliche ModelltheorieGraph (mathematics)AbstractionAuthorizationXMLComputer animation
09:58
Web browserCompilerFiber bundleScripting languageStack (abstract data type)Data managementWeb pageVolumenvisualisierungScripting languageModule (mathematics)Process (computing)Web browserQuicksortJava appletGraph (mathematics)Library (computing)FacebookSoftware frameworkAxiom of choiceTranslation (relic)Different (Kate Ryan album)Goodness of fitDirected graphEndliche ModelltheorieNamespaceSpacetimeComputer fileElement (mathematics)CodeHill differential equationDeterminismSoftware bugMultiplication signIntegrated development environmentSystem callWeb 2.0Right angleConfiguration spaceMoving averageAdditionSingle-precision floating-point formatGraphics tabletMobile appMedical imagingTerm (mathematics)Stress (mechanics)Game controllerCompilation albumInversion (music)Type theoryProduct (business)Speech synthesisFiber bundleFluid staticsDigital rights managementArithmetic meanComputer animation
15:09
Software frameworkGame controllerKeyboard shortcutContent (media)Data structureAerodynamicsAnnulus (mathematics)outputFunction (mathematics)Group actionView (database)FluxArchitectureInformationVirtual realityForm (programming)Software testingWeb browserDuality (mathematics)Computer programmingSpectrum (functional analysis)Term (mathematics)Process (computing)DialectMultiplication signRight angleBit rateMoment (mathematics)Web browserWeb 2.0Game controllerForm (programming)Axiom of choiceState of matterFunctional (mathematics)Structural loadSoftwareArtistic renderingSingle-precision floating-point formatMathematicsGroup actionParameter (computer programming)Self-organizationSoftware testingoutputMereologyInternet service providerReduction of orderPattern languageDirection (geometry)QuicksortContent (media)Data structureEndliche ModelltheorieFacebookView (database)Data storage deviceState observerFluxComputer architectureCartesian coordinate systemPerformance appraisalInformationDifferent (Kate Ryan album)Programming paradigmGoodness of fitKey (cryptography)Web pageRule of inferenceFlow separationMobile appKeyboard shortcutComputer animation
21:10
Fiber bundleTemplate (C++)Scripting languageJava appletSoftware frameworkVariable (mathematics)Data structureElectronic visual displaySoftware developerKeyboard shortcutInterface (computing)Fiber (mathematics)Product (business)FacebookMobile appGoodness of fitProjective planeFiber (mathematics)Multiplication signCodeOpen sourceSoftware frameworkDifferent (Kate Ryan album)Installation artSoftware testingAxiom of choiceTemplate (C++)Core dumpQuicksortInformationComponent-based software engineeringVariable (mathematics)Game controllerRevision controlVirtualizationNatural numberReal numberComplex (psychology)Arithmetic meanInteractive television2 (number)Pattern languageGenderLevel (video gaming)Band matrixComputerScripting languageFilm editingBuildingJava appletServer (computing)Web browserProcess (computing)Right angleBitSocial classWeb 2.0Computer animation
26:55
ComputerComputer animationXML
Transcript: English(auto-generated)
00:01
Welcome to the last talk of DjangoCon US 2017. You made it. You survived, almost.
00:21
Thank you for coming to listen to me talk. The topic for today is understanding JavaScript via React and the React ecosystem. So my name is Andrew Pinkham. I am probably best known as the author of Django Unleashed. I'm currently working on a video series based on the same material with Pearson, and hopefully a second edition for Django 1.11,
00:42
because the book is in Django 1.8. By day, I'm a software consultant with Jambond Software. We're currently working with a client on machine learning over high resolution satellite imagery, which is super interesting, a little bit outside of what I'm used to doing, but it's nice to get away from Django every once in a while. One of the nice things about being self-directed
01:01
as a consultant is you get to work on some really, really cool projects. So at the beginning of the year, I started working with Russell Keith-McGee on SearchCycle. SearchCycle is basically a way for automatically installing and monitoring certificates in the cloud, specifically Amazon and Azure. We're gonna be looking for beta testers before the end of the year, so if that sounds even remotely interesting,
01:21
please come talk to me. But today, you're here to talk, you're here to hear me talk about JavaScript. I had someone mention, oh, you're doing the React talk, right? Oh no, it's not the React talk, it's the JavaScript talk? Oh, it's a little bit of a bait and switch there. I'm really sorry if you showed up here expecting to hear mostly about React.
01:41
This is mostly gonna be about what I learned about JavaScript while programming a React website. This is targeted at devs who are not particularly familiar with JavaScript. So if you use NPM and Yarn, I'm really not gonna hold it against you if you get up and you leave, no worries. The talk outline is gonna start with,
02:01
how did I get here, right? Like I'm mostly Python and Django, and suddenly I'm doing JavaScript, like what forces me into using this language that I have desperately, desperately tried to avoid? We're gonna jump into sort of a brief history of the web, and then we'll talk about JavaScript, the web frameworks, what the problem is, and then finally React, and sort of React's ecosystem
02:22
and all the things that we had to deal with there. This talk is fundamentally incomplete. And I really wanna take a moment to focus on this because I'm taking a year of experience and I'm condensing it into 20 minutes. I simply don't have time to go into all of the details.
02:41
What I'm hoping for here is to give you all the people who are sort of beginning on their journey and don't have a map. So I'm not gonna give you a very good map, right? It's sort of a medieval map, and you know, here be dragons, and there's an island kind of off over this way. But hopefully it's better than starting with nothing at all.
03:01
So let's talk about how I got here. What started the journey? Well, in early 2016, a client asked me if I knew Django, and I kind of said, yeah, I have an inkling of how that thing works. And they said, well, that's great. We'd like you to program JavaScript on top of the Django app. And I said, no, no, no, no, no, no, no, no. That's not how that works.
03:22
And they said, no, no, no, no, no, please do it. And I will leave it to your imagination to guess how the rest of that project went. But so as I'm starting this project, this is the to-do list that I set out for myself. You know, oh, learn JavaScript, figure out how it works, and then go build it. Yeah, I forgot the most important part.
03:41
And the most important part is I didn't understand the problem. I didn't understand fundamentally what the problem that I was trying to solve with the framework and with JavaScript. And this is not a commentary about JavaScript itself, right? This happens with Django. People go, oh, yes, I need to build a website, which I didn't use, oh, you should use Django.
04:02
What just happened, right? What's actually happened is a fairly implicit conversation. Someone has actually asked the question, hey, I need to build a software application that communicates with other computers over HTTP, and then is gonna serve up HTML and CSS. You know, do you know of any tools that do that?
04:22
Oh, yeah, Django handles all of that. You should go use Django. And so I was asking this question like, hey, how do I build a dynamic front end that is gonna communicate with an API? Oh, you should use all of these tools. Well, wait, hold on. What am I actually asking when I ask that question? What is fundamentally the problem that I am trying to solve?
04:43
Like many things, the problem becomes really, really clear if you start with history. So let's talk about HTML. HTML first appears in 1991, and it is immediately rolled out into the first browser called Mesaic and then quickly implemented in things like Netscape Navigator and Internet Explorer. But lovely.
05:00
It's all slightly different implementations just to like really mess with you. HTML is originally intended as a way of sharing scientific documents, right? You wanna go ahead and share your scientific research at CERN, so you've got the content, but you also have all of the structure of the document. This is a title, these are the authors,
05:20
this is the abstract, et cetera, et cetera, et cetera. But that introduces a sort of duality here, right? There is content and structure when you're dealing with HTML. And I'm gonna stretch this analogy. If it's a little bit like model-view-controller, then the content is a little bit like the model, and the structure of the document is a little bit like the view. I realize I'm stretching this.
05:42
I'm not stretching it too much though, right? Because CSS doesn't actually get talked about until 1994. The first spec doesn't exist until the very end of 1996. And so the first time that you're really gonna see CSS used is in 1997, which is six years after HTML really comes to be.
06:02
So that's HTML, let's talk about JavaScript. JavaScript is built in 10 days. It's a glue language in 1995, and it's effectively this sort of collaboration between Sun and Netscape, because they're freaking out about Internet Explorer. And so they hired this guy, Brendan Eich,
06:21
and he wants to put Scheme in the browser. The problem is is that because of politics, they want to use Java, they want to reference Sun's Java. So they're gonna call it JavaScript, and they need something that looks like object-oriented programming. So he goes and he uses prototypal inheritance taken from a programming language called self,
06:42
which looks nothing like Java. It's important, the reason they're building this is because they want to manipulate the DOM, right? The real reason that they're putting this together is they want to be able to change the content
07:00
in the structure in the HTML. It's also worth noting that this has changed over time. The JavaScript that we are currently working with is not the JavaScript that was put together at that point. And so now that we have the history of HTML and of JavaScript, we really understand the core problems here, right? JavaScript has vocabulary that we think means one thing,
07:22
and it actually means something completely different. Classes don't mean what you think it means. JavaScript and HTML are implemented slightly differently in all of the browsers, and JavaScript has slightly different features in each one of these browsers according to its version. The HTML DOM is weird, right?
07:42
Like it's got its own hidden state, even though it's supposed to be the state, and it's got event handling, but it's different across all of the different browsers. And then there's the duality of it, right? Content and structure. So let's go through each one of these problems in this order, right? Let's start with JavaScript.
08:00
You're not gonna be able to do much about the fact that they use words and you think it means one thing, and then it means something else. The sad truth is that you simply have to sit down and learn the vocabulary. I found Douglas Crockford's book, JavaScript, the Good Parts, to be incredibly helpful. Eric Elliott's Programming JavaScript Applications
08:21
was less about JavaScript and more about the stuff that we're about to talk about, but I wanted to put it all in one side. And then Kyle Simpson's You Don't Know JavaScript is really interesting, not necessarily immediately helpful for the hands-on stuff. If you're not into books like I am, you might wanna look at frontend masters in egghead.io. They have videos that sort of cover the same stuff.
08:42
So that's JavaScript, the language. Now we can talk about the different versions. I'm gonna skip the fact that it's slightly different in different browsers, because it's no longer something that most developers have to worry about. jQuery and MooTools originally solved this in the early 2000s, and if you're using a modern framework, you don't have to worry about it.
09:00
So let's just skip it. You do have to worry about the different language versions. And this is where things begin to get weird, because if you're using Python, you can just decide that you're gonna run C Python 2.7 or C Python 3.6, you just run it. But you have different browsers and they're all implementing it, so you need a spec. So the spec is ECMAScript,
09:22
and you can propose things via this thing called TC39. I'm actually unclear on what the name is. If you're running in the browser, you expect sort of when we started ES3, so JavaScript that conforms to ECMAScript 3 or JavaScript that conforms to ECMAScript 5,
09:40
I'm just gonna start calling them ECMAScript or ES3, ES5, in modern browsers. But ECMAScript 6 and most of 7 currently exists. But unlike with Python, where you can just be like, oh, we upgraded our code base and now you just have to run it in Python 3 and you're done with it, you don't get to control
10:00
who's running your JavaScript. You don't get to say what browser is being used. So the question then becomes, well, hey, can we write in modern JavaScript and then ship older JavaScript, right? Can we write in ES6 and ship ES5? The answer is yes. You can compile JavaScript to JavaScript. The community has decided that this is called transpilation.
10:21
No, I don't know why. No, I'm not asking. There is one additional complication on top of transpilation. And it's that ES6 introduces namespaces and modules. As Python people, you look at this and you go, wait, hold on, import syntax, right? You import all the time, import X from Y or simply import Y, right?
10:41
This is easy. But JavaScript has no knowledge of this in ECMAScript 5. You don't get to use that at all, but you do get to use it in ECMAScript 6. So how do you take all of your different files and namespaces and produce a single file? Well, it's called bundling, right? You bundle all these modules, all these namespaces
11:01
into a single file, which you can then serve up to the browser and run as if it's the old thing. So let's now talk about transpilers and bundlers and sort of get into it. Transpilers are actually fairly simple, right? It's a compiler. And if you're starting, just use Babel.
11:20
There's a really interesting project, if you're curious about all of this, called Buble. It's sort of like a performant Babel. It doesn't do all the things that Babel does, but it has an edge. Check it out. It's worth noting that you don't have to go from JavaScript to JavaScript. You can also go from TypeScript to JavaScript or CoffeeScript to JavaScript. TypeScript's actually really interesting,
11:40
because it's Microsoft's product, and they introduce static typing into JavaScript. We're currently using it at work. I've only used it for two weeks, so I don't want to say too much about it. But so far, I'm enjoying it. Bundlers are what I found the most confusing. People were just like, oh, use Webpack. Well, what does Webpack do?
12:01
What is this thing? And the problem is that originally, you had two tools. You would take all of your files. You would run it through this pipeline. You'd do whatever you need to it. And then you pass it into browserify, and it produces that one single file that you need. Great, except now you're using three or four tools to do all the things that you want until Webpack.
12:22
But that means that Webpack is not only a bundler. It's also your pipeline tool. And then to make matters more confusing, it expects not only to pipeline your JavaScript. It wants your images and your CSS and your HTML and any asset that you're going to serve. And so the configs are really, really confusing.
12:42
I want to note very quickly that Webpack is for apps. If you're going to be providing libraries, you want to check out a thing called Rollup, because do one thing and do one thing well, I guess. Now, speaking of libraries, we haven't really dealt with any of the environment tools. Someone over in the back is looking a little overwhelmed.
13:02
I'm sorry. The environment tools, right? You're used to PIP. You just use PIP. No, you get the choice. So NPM was king of the hill, but when you install things with NPM, it's actually non-deterministic. So I had people on my team who were seeing one bug. Someone else was seeing a different bug, and I wasn't seeing any bugs.
13:20
So we switched to Yarn, which installs things deterministically. Now, I'm told that NPM has actually fixed this. I don't actually know. I haven't tried it. We've stayed with Yarn. I've also heard of this thing, PNPM. It's supposed to be more space efficient. Honestly, I don't really know what to tell you on this front. I use Yarn. It's great.
13:41
I feel like people could bike shed about this. I'm just going to keep going. There are linters. That should say JSLint and JSHint. They're the originals, and they're basically being succeeded by this thing called ESLint. You should probably just use ESLint. In conclusion, for the starting pack,
14:01
for just JavaScript. We haven't even touched the web frameworks yet, right? You want Babel for transpilation, Webpack for your pipelining and bundling. You want to use ESLint for linting. And then, for goodness sakes, I don't know what to tell you on package management anymore. Yarn is great. Yarn is backed by Facebook, if that makes your choice
14:23
easier in terms of institutional support. Before we talk about the various frameworks and libraries, I want to make sure everyone's really clear about what I mean. I'm making a really important distinction. A library is something you call yourself, right? You use requests as a library.
14:41
You have some main loop, and you call it. A framework is something that is going to call your own code, referred to as inversion of control, or else sometimes the Hollywood principle. Don't call us. We'll call you. Django is a really good example of a framework. Both provide a mental model for working with the tools
15:03
to provide a solution. So we understand the problem. The problem is effectively the DOM. I think Marco Rogers said it best. This is a reminder that the DOM is actually a giant mutable global variable in the middle of your program, not to mention the fact that there's this duality to it
15:23
as well. So the way I think about it is like this. You've got your HTML to one side. It's got the model and the view, and you really wish it didn't. Then you've got JavaScript over there, and you're going to try and use it in some way to control it. So we all are familiar with model view controller, and Angular 1 is a really good example of this.
15:42
I haven't played with Angular 2 or Angular 4. I just found out today, thank you, that there is no Angular 3. Madness. It's referred to as MVC. I'm not sure that's 100% accurate. And they keep the JavaScript totally separate, and then they ask you to annotate the HTML with what
16:01
they call directives so that they kind of connect the two with this two-way binding. So the content is dynamic, but the structure of the app is still dictated by the HTML. I think of it like this. You've managed to split up this model into smaller parts, and if you change it in the HTML,
16:20
it's reflected in the JavaScript and vice versa, but it doesn't actually sort of separate that weird duality between the HTML or in the HTML. All the way at the other end of the spectrum, we have these reactive programming things. They're fairly new. They're a little strange, and they look at the problem and they say, you know what? We want to think about this in terms of time, right?
16:42
We're going to have these initial parameters, and we expect that people are going to show up. They're going to click buttons, and we're going to get inputs, but changes happen according to time, and we want those changes to be deterministic. So you set up a function at the beginning when your page loads, and you say, well, if things change in the following ways,
17:01
if I see the following things, then I want you to deterministically change the HTML in the following ways. It's a little strange, and the real problem is that it almost kind of gets away from this idea of model or state, right? You have these actions over time, and you're pumping them through a function,
17:21
so it's very functional, and then you have the view. Now, this is very nice, though. You'll notice there's a single direction for control, and that's a real improvement over a two-way binding. Facebook's React is sort of this lovely in-between, right? It stays with the single direction of information,
17:43
but it's a library, and so it only provides part of the solution. They call it the view in an MVC app, and again, MVC is not quite right, but we're gonna stick with it, and they expect that your MVC app is going to follow this thing called the Flux architecture. So on top of that, they're like,
18:01
oh, it's a view, and you have to follow all the following rules. Good luck learning all of them. The one key difference, though, is that they move completely away from modifying the HTML. They introduce this concept of a virtual DOM, and they're going to modify the HTML after they create this virtual DOM, and that really changes things quite drastically.
18:23
It looks almost kind of like this. The problem, of course, is that React only gives you that. It gives you part of the controller and none of the state. Also, the way they put this together is they say, oh, well, this is how it works. The actions are either network actions or user actions.
18:42
It's clicking a button. It's receiving network information like JSON from an API, and they're gonna handle the rendering of the view, but they don't give you this dispatcher, which is effectively the controller. It's what controls the actions and how to behave, and the dispatcher's goal is always
19:00
to change this state or this store. It's just raw data that is used to render out the HTML, so what do you do? There's also a side trick here. They're only actually giving you kind of sort of part of the view, so the first thing they say is, oh, yes, well, you have to be able to handle JSX.
19:21
That's how we're going to sort of provide syntactic sugar that makes sense for interacting with the virtual DOM, so that's the first thing you need, and then there are lots of tools that provide the Flux architecture. The one we were using was Redux. It's sort of become the de facto go-to, and so it works on a functional accumulator,
19:41
sometimes also called a reducer. You hear about the reducer pattern. Unfortunately, I don't have time to go into it, but once you sort of look in that functional paradigm, it's actually fairly intuitive, and so it breaks down like this. You've got the Redux and the connector ReactRedux, which allows you to manage your state
20:00
and part of the controller, and then React and JSX for handling the sort of the end of the controller and writing out to the view. Now, of course, that turns out not to be enough either. Everything I've just shown you is synchronous, and that's a real problem because you're interacting with an API and you're receiving network requests, so you need to be able to handle
20:21
asynchronicity in your application. There are lots of solutions for this. Redux Thunk is the simplest. Netflix is using a thing called Redux Observables. It is overkill. Redux Saga seems to be growing in terms of preference. I haven't played with it. It's a lot. The other thing is that you are going to be making
20:41
network requests. For a long time, you wanted to use XML HTTP request. Don't, we're moving to a new spec. Get a polyfill for fetch. It introduces a ton of sanity. We also use Redux forms and Redux logger. It is exactly what you think it is. I want to take a quick moment to talk about testing because testing is the best.
21:01
You have yet another choice to make. Where do you test, right? JavaScript for a long time only ran in the browser. Suddenly, we have this node thing. You can now run it directly in a process. That's where Webpack is running. You can also run your testing, and in fact, you probably should. Originally, you would have used Karma with Jasmine or Mocha
21:20
to run directly in the browser, or you would have done end-to-end testing with Selenium WebDriver. But because you're not really programming to the differences in the browser and you're using a framework, you can avoid all of that complexity and you can use Node to run your test with Facebook's Jest, and it's built to work with React. It's glorious.
21:40
We went from having tests that ran six or seven minutes in Karma. They ran in under a minute with Jest. It was huge. I highly recommend it. So that's React, the mental framework. There's a really important implication here. React owns the entirety of the DOM.
22:02
It's got this virtual DOM, and it's in full control of the DOM. So how does that interact with Django and Django templates? And unfortunately, there is no good answer here. If you're just interacting with the Django API or any API, this is fairly straightforward. You use fetch, you make requests, and you get JavaScript back, thank you.
22:23
If you are interacting with Django templates, oh boy, right, because Django templates want to provide HTML and the DOM, but React wants to be in full control of it. Do you precompute with Node on your server? Do you try and provide information in your templates
22:42
so that you can load that information directly into React? What about progressive enhancement? What about accessibility? Honestly, there isn't a clear-cut answer here. It depends a lot on your app, a lot on the market, who your users are. There's also, like, I could give a full talk about this.
23:00
Luckily, I don't have to, because Julian Falipp, core contributor of Django, gave a talk about this to DjangoCon2Go. It is still quite relevant, so I highly recommend it. To conclude, JavaScript's problem is the DOM. The DOM is horrible.
23:23
It has this dual nature to it, and it is a giant global variable. And the goal of every framework is to try and provide some means of dealing with this global variable in a sane fashion. Whereas with HTTP on the back end,
23:43
a lot of the frameworks look similar. You can start with Django, and then you can look at BottlePy, and you can look at Flask, and you understand what's going on, because the solutions are fairly similar. You understand the core components. It's a little harder with JavaScript, because the way they rationalize the solution
24:01
is a little bit different. So it's worth taking time to look at their mentality, the mental framework that they're using, because the solution for your product is going to differ. There are some places where Angular is going to be a better choice than React, and unfortunately it's gonna really depend
24:21
on the product that you're building. If I were starting this all over again, I would not spend the two weeks I did configuring Webpack. It's awful. Thankfully, no really, thankfully Facebook has put together this thing called Create React App. It is great.
24:41
It works like black magic, which is unfortunate, but it gives you this project that is Yarn-compatible, it comes with Webpack, it comes with Babel, it gives you a config, it works with ESLint, and it comes with just tests. Goodness gracious, thank you. Of course, JSX and React, somewhat obvious.
25:02
You will have to install Redux, and Redux-Logger, and Redux-React, and oh, you get the picture, yourself, but you're gonna have to do that anyways. I think I have like 15 seconds. What's coming next? As with JavaScript, everything moves
25:25
at a million miles an hour. React is about to ship a brand new version. It's the fastest, it's better, it's called React Fiber. Should I use it? I really don't know. The Apache Foundation came forward and said, you can't use React in open source apps
25:42
because of the patents that Facebook has placed on the React code. There's a really interesting problem where should you use it at all? What about using libraries like InfernoJS, which is effectively the same API and exactly the same mental framework, but that is much, much quicker? Do those patents apply?
26:01
I honestly don't know. There's some other really interesting, there's some interesting movement. Google IO lately has really focused on performance because of these, right? Running JavaScript on these mobile devices is actually really taxing bandwidth, computation, et cetera, and so there's a real sort of movement in the JavaScript community
26:21
to move towards simpler, smaller apps. Svelte is really interesting. It's not ready for production yet, but I would keep an eye out for it. I've heard really good things about UJS. Should you use it instead of React? Again, I'm unfortunately really unsure, and I wish I could give you a firmer answer about that.
26:45
Thank you very much. Yes.