|Original author(s)||Jordan Walke|
|Developer(s)||Facebook, Instagram and community|
|Initial release||March 2013|
|Stable release||15.1.0 / May 20, 2016|
|Size||128 KiB production
559 KiB development
|License||3-Clause BSD with Facebook addendum (not OSI-approved)|
||This section contains content that is written like an advertisement. (March 2016) (Learn how and when to remove this template message)|
React was created by Jordan Walke, a software engineer at Facebook. He was influenced by XHP, an HTML component framework for PHP. It was first deployed on Facebook's newsfeed in 2011 and later on Instagram.com in 2012. It was open-sourced at JSConf US in May 2013. React Native, which enables native iOS and Android development with React, was announced at Facebook's React.js Conf in February 2015 and open-sourced in March 2015.
One-way data flow
Properties, a set of immutable values, are passed to a component's renderer as properties in its HTML tag. A component cannot directly modify any properties passed to it, but can be passed as callback functions that do modify values. This mechanism's promise is expressed as "properties flow down actions flow up".
For example, a shopping cart component might include multiple product line components. Rendering a product line uses only the properties passed to it and cannot affect the shopping cart's total due. However, the product line could be passed a callback function as a property which would be called when a 'delete this product' button was pushed and that callback function could affect the total due.
Another notable feature is the use of a "virtual DOM." React creates an in-memory data structure cache, computes the resulting differences, and then updates the browser's displayed DOM efficiently. This allows the programmer to write code as if the entire page is rendered on each change while the React libraries only render subcomponents that actually change.
For example, a shopping cart component would be written to render the entire shopping cart on any change of data. If a product line subcomponent had no changes to the properties, a cached rendering would be used. This means the relatively slow full update to the browser's DOM would be avoided. Alternately, if the product line quantity had changed, the product line subcomponent would be rendered; the resulting HTML might differ in only one node, and only that node would be updated in the DOM.
Architecture Beyond HTML
The basic architecture of React applies beyond rendering HTML in the browser. For example, Facebook has dynamic charts that render to <canvas> tags, and Netflix and PayPal use isomorphic loading to render identical HTML on both the server and client.
React Native libraries announced by Facebook in 2015  provide the React architecture to native iOS and Android applications.
The status of the React sub-projects is updated in the project wiki.
Patents clause controversy
The initial public release of React in May 2013 used a standard Apache License 2.0. In October 2014, React 0.12.0 replaced this with a 3-clause BSD license and added a separate PATENTS text file that permits usage of any Facebook patents related to the software.
"The license granted hereunder will terminate, automatically and without notice, if you (or any of your subsidiaries, corporate affiliates or agents) initiate directly or indirectly, or take a direct financial interest in, any Patent Assertion: (i) against Facebook or any of its subsidiaries or corporate affiliates, (ii) against any party if such Patent Assertion arises in whole or in part from any software, technology, product or service of Facebook or any of its subsidiaries or corporate affiliates, or (iii) against any party relating to the Software. [...] A "Patent Assertion" is any lawsuit or other action alleging direct, indirect, or contributory infringement or inducement to infringe any patent, including a cross-claim or counterclaim."
This unconventional clause caused some controversy and debate in the React user community, because it may be interpreted to empower Facebook to revoke the license in many scenarios, for example if Facebook sues the licensee prompting them to take "other action" by publishing the action on a blog or elsewhere. Many expressed concerns that Facebook could unfairly exploit the termination clause or that integrating React into a product might complicate a startup company's future acquisition. At the time, Google reportedly forbade its employees from using any code under this license.
Based on community feedback, Facebook updated the patent grant in April 2015 to be less ambiguous and more permissive.
- "Releases - facebook/react". Github.
- "React: Making faster, smoother UIs for data-driven Web apps". InfoWorld.
- "Libscore". libscore.com.
- "Open Source in 2015: A Year of Growth".
- "GitHub search results sorted by number of stars".
- "React (JS Library): How was the idea to develop React conceived and how many people worked on developing it and implementing it at Facebook?". Quora.
- "Pete Hunt at TXJS".
- "Working With the Browser". React.
- "JSX in Depth". Retrieved 2015-11-17.
- "PayPal Isomorphic React".
- "Netflix Isomorphic React".
- "Meeting Notes". React Discuss. Retrieved 2015-12-13.
- "reactjs/react-future - The Future of React". GitHub. Retrieved 2015-12-13.
- "facebook/react - Feature request issues". GitHub. Retrieved 2015-12-13.
- "facebook/react Projects wiki". GitHub. Retrieved 2015-12-13.
- "facebook/react - CONTRIBUTING.md". GitHub. Retrieved 2015-12-13.
- "Contributing to Facebook Projects". Facebook Code. Retrieved 2015-12-13.
- "React CHANGELOG.md". GitHub.
- "Additional Grant of Patent Rights Version 2". GitHub.
- Liu, Austin. "A compelling reason not to use ReactJS". Medium.
- Hunter, Zellyn. "Hacker News: React Native is now open source". Y Combinator. Retrieved 9 December 2015.
- "Updating Our Open Source Patent Grant".