From 58173edb165c81ffcccd654e788106a8fce82f31 Mon Sep 17 00:00:00 2001 From: Vjeux Date: Sat, 21 Sep 2013 18:28:22 +0200 Subject: [PATCH] Community round-up #8 --- docs/_posts/2013-09-24-community-roundup-8.md | 70 ++++++++++++++++++ docs/img/blog/markdown_refactor.png | Bin 0 -> 7329 bytes docs/img/blog/unite.png | Bin 0 -> 16164 bytes 3 files changed, 70 insertions(+) create mode 100644 docs/_posts/2013-09-24-community-roundup-8.md create mode 100644 docs/img/blog/markdown_refactor.png create mode 100644 docs/img/blog/unite.png diff --git a/docs/_posts/2013-09-24-community-roundup-8.md b/docs/_posts/2013-09-24-community-roundup-8.md new file mode 100644 index 0000000000000..eb7c52f725d7d --- /dev/null +++ b/docs/_posts/2013-09-24-community-roundup-8.md @@ -0,0 +1,70 @@ +--- +title: "Community Round-up #8" +layout: post +author: Vjeux +--- + +A lot has happened in the month since our last update. Here are some of the more interesting things we've found. But first, we have a couple updates before we share links. + +First, we are organizing a [React Hackathon](http://reactjshack-a-thon.splashthat.com/) in Facebook's Seattle office on Saturday September 28. If you want to hack on React, meet some of the team or win some prizes, feel free to join us! + +We've also reached a point where there are too many questions for us to handle directly. We're encouraging people to ask questions on [StackOverflow](http://stackoverflow.com/questions/tagged/reactjs) using the tag [[reactjs]](http://stackoverflow.com/questions/tagged/reactjs). Many members of the team and community have subscribed to the tag, so feel free to ask questions there. We think these will be more discoverable than Google Groups archives or IRC logs. + +## Javascript Jabber + +[Pete Hunt](http://www.petehunt.net/) and [Jordan Walke](https://github.com/jordwalke) were interviewed on [Javascript Jabber](http://javascriptjabber.com/073-jsj-react-with-pete-hunt-and-jordan-walke/) for an hour. They go over many aspects of React such as 60 FPS, Data binding, Performance, Diffing Algorithm, DOM Manipulation, Node.js support, server-side rendering, JSX, requestAnimationFrame and the community. This is a gold mine of information about React. + +> **PETE:** So React was designed all around that. Conceptually, how you build a React app is that every time your data changes, it's like hitting the refresh button in a server-rendered app. What we do is we conceptually throw out all of the markup and event handlers that you've registered and we reset the whole page and then we redraw the entire page. If you're writing a server-rendered app, handling updates is really easy because you hit the refresh button and you're pretty much guaranteed to get what you expect. +> +> **MERRICK:** That's true. You don't get into these odd states. +> +> **PETE:** Exactly, exactly. In order to implement that, we communicate it as a fake DOM. What we'll do is rather than throw out the actual browser html and event handlers, we have an internal representation of what the page looks like and then we generate a brand new representation of what we want the page to look like. Then we perform this really, really fast diffing algorithm between those two page representations, DOM representations. Then React will compute the minimum set of DOM mutations it needs to make to bring the page up to date. +> +> Then to finally get to answer your question, that set of DOM mutations then goes into a queue and we can plug in arbitrary flushing strategies for that. For example, when we originally launched React in open source, every setState would immediately trigger a flush to the DOM. That wasn't part of the contract of setState, but that was just our strategy and it worked pretty well. Then this totally awesome open source contributor Ben Alpert at Khan Academy built a new batching strategy which would basically queue up every single DOM update and state change that happened within an event tick and would execute them in bulk at the end of the event tick. +> +> [Read the full conversation ...](http://javascriptjabber.com/073-jsj-react-with-pete-hunt-and-jordan-walke/) + + +## JSXTransformer Trick + +While this is not going to work for all the attributes since they are camelCased in React, this is a pretty cool trick. + +
+ + + +## Remarkable React + +[Stoyan Stefanov](http://www.phpied.com/) gave a talk at [BrazilJS](http://braziljs.com.br/) about React and wrote an article with the content of the presentation. He goes through the difficulties of writting _active apps_ using the DOM API and shows how React handles it. + +> So how does exactly React deal with it internally? Two crazy ideas - virtual DOM and synthetic events. +> +> You define you components in React. It builds a virtual DOM in JavaScript land which is way more efficient. Then it updates the DOM. (And "virtual DOM" is a very big name for what is simply a JavaScript object with nested key-value pairs) +> +> Data changes. React computes a diff (in JavaScript land, which is, of course, much more efficient) and updates the single table cell that needs to change. React replicates the state of the virtual DOM into the actual DOM only when and where it's necessary. And does it all at once, in most cases in a single tick of the `requestAnimationFrame()`. +> +> What about event handlers? They are synthetic. React uses event delegation to listen way at the top of the React tree. So removing a node in the virtual DOM has no effect on the event handling. +> +> The events are automatically cross-browser (they are React events). They are also much closer to W3C than any browser. That means that for example `e.target` works, no need to look for the event object or checking whether it's `e.target` or `e.srcElement` (IE). Bubbling and capturing phases also work cross browser. React also takes the liberty of making some small fixes, e.g. the event `` fires when you type, not when blur away from the input. And of course, event delegation is used as the most efficient way to handle events. You know that "thou shall use event delegation" is also commonly given advice for making web apps snappy. +> +> The good thing about the virtual DOM is that it's all in JavaScript land. You build all your UI in JavaScript. Which means it can be rendered on the server side, so you initial view is fast (and any SEO concerns are addressed). Also, if there are especially heavy operations they can be threaded into WebWorkers, which otherwise have no DOM access. +> +> [Read More ...](http://www.phpied.com/remarkable-react/) + + +## Markdown in React + +[Ben Alpert](http://benalpert.com/) converted [marked](https://github.com/chjj/marked), a Markdown Javascript implementation, in React: [marked-react](https://github.com/spicyj/marked-react). Even without using JSX, the HTML generation is now a lot cleaner. It is also safer as forgetting a call to `escape` will not introduce an XSS vulnerability. +
[![](/react/img/blog/markdown_refactor.png)](https://github.com/spicyj/marked-react/commit/cb70c9df6542c7c34ede9efe16f9b6580692a457)
+ + +## Unite from BugBusters + +[Renault John Lecoultre](https://twitter.com/renajohn) wrote [Unite](https://www.bugbuster.com/), an interactive tool for analyzing code dynamically using React. It integrates with CodeMirror. +
[![](/react/img/blog/unite.png)](https://unite.bugbuster.com/)
+ +## #reactjs IRC Logs + +[Vjeux](http://blog.vjeux.com/) re-implemented the display part of the IRC logger in React. Just 130 lines are needed for a performant infinite scroll with timestamps and color-coded author names. + + diff --git a/docs/img/blog/markdown_refactor.png b/docs/img/blog/markdown_refactor.png new file mode 100644 index 0000000000000000000000000000000000000000..8d56be161b21e10423ff1a77170ff23f9198bf74 GIT binary patch literal 7329 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 H*7yG}$1tHB literal 0 HcmV?d00001