React (JavaScript Library)
Original author(s) Jordan Walke
Developer(s) Facebook, Instagram and community
Initial release March 2013; 5 years ago (2013-03)
Stable release
16.2.0 / November 28, 2017; 3 months ago (2017-11-28)[1]
Repository Edit this at Wikidata
Development status Active
Written in JavaScript
Platform Cross-platform
Size 109 KiB production
710 KiB development
Type JavaScript library
License MIT

In computing, React (sometimes styled React.js or ReactJS) is a JavaScript library[2] for building user interfaces.

It is maintained by Facebook, Instagram and a community of individual developers and corporations.[3][4][5]

React allows developers to create large web-applications that use data and can change over time without reloading the page. It aims primarily to provide speed, simplicity, and scalability. React processes only user interfaces in applications. This corresponds to View in the Model-View-Controller (MVC) pattern, and can be used in combination with other JavaScript libraries or frameworks in MVC, such as AngularJS.[6]


React was created by Jordan Walke, a software engineer at Facebook. He was influenced by XHP, an HTML component framework for PHP.[7] It was first deployed on Facebook's newsfeed in 2011 and later on in 2012.[8] It was open-sourced at JSConf US in May 2013.

React Native, which enables native Android, iOS, and UWP development with React, was announced at Facebook's React.js Conf in February 2015 and open-sourced in March 2015.

On April 18, 2017, Facebook announced React Fiber, a new core algorithm of React framework library for building user interfaces.[9] React Fiber will become the foundation of any future improvements and feature development of the React framework.[10]

Basic usage

The following is a rudimentary example of how React can be used in html using JSX and the ECMAScript 2015 JavaScript syntax.

<div id="myReactApp"></div>

<script type="text/babel">
  class Greeter extends React.Component { 
    render { 
      return <h1>{this.props.greeting}</h1>

  ReactDOM.render(<Greeter greeting="Hello World!" />, document.getElementById('myReactApp'));

The Greeter class is a React component that accepts a property greeting. The ReactDOM.render method creates an instance of the Greeter component, sets the greeting property to 'Hello World' and inserts the rendered component as a child element to the DOM element with id myReactApp.

Babel will transpile the above ECMAScript 2015 class code to ES5 code to the following:


When displayed in a web browser the result will be

<div id="myReactApp">
  <h1>Hello World!</h1>

Notable features

One-way data flow

To use React to its greatest potential, Properties (or props)--ideally a set of immutable values--are passed to a component's render function. A component should not directly modify any properties passed to it, but should be passed callback functions that instead modifies the store creating a single source of truth. This mechanism's promise is expressed as "properties flow down; actions flow up". The described mechanism is an architecture called Flux.[11][12] Many Flux alternatives have been created since its inception however the community has moved toward Redux.[13]

Virtual DOM

Another notable feature is the use of a "virtual Document Object Model", or "virtual DOM". React creates an in-memory data structure cache, computes the resulting differences, and then updates the browser's displayed DOM efficiently.[14] This allows the programmer to write code as if the entire page is rendered on each change, while the React libraries only render sub components that actually change.


React components are typically written in JSX, a JavaScript extension syntax allowing quoting of HTML and using HTML tag syntax to render subcomponents.[15] This is a React-specific grammar extension to JavaScript like the now-defunct E4X. HTML syntax is processed into JavaScript calls of the React framework. Developers may also write in pure JavaScript. JSX is similar to another extension syntax created by Facebook for PHP, XHP. JSX looks like regular HTML. An example of JSX code:

import React from 'react';

class App extends React.Component {
  render {
    return (

export default App;
Nested elements

Multiple elements need to be wrapped in a single container element like the <div> element shown above. As of React v16.0 it is now possible to return an array of elements, fragments and strings.[16]


Custom attributes are supported in addition to HTML attributes. The custom attributes need to be added with the data- prefix. Custom attributes as of v16.0 are now passed through to the DOM.[17]

JavaScript expressions

JavaScript expressions (but not statements) can be used inside JSX with curly brackets {}:

import React from 'react';

class App extends React.Component {
  render {
    return (

export default App;

The example above will render

Conditional statements

If-else statements cannot be used inside JSX but conditional expressions can be used instead. The example below will render { i === 1 ? 'true' : 'false' } as the string 'true' because i is equal to 1.

import React from 'react';

class App extends React.Component {
  render {
    const i = 1;
    return (
        <h1>{ i === 1 ? 'true' : 'false' }</h1>

export default App;

Not only can you return strings via conditional operators you can also pass functions and fragments of code.

import React from 'react';

class App extends React.Component {
  render {
    const arr = [1, 2, 3];
    return (
          arr.length > 0 ?
              return (<div>Section {int}</div>)
            : null

export default App;

The example above if arr has values (of which it has 3) will render:

  <div>Section 1</div>
  <div>Section 2</div>
  <div>Section 3</div>

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,[18] and Netflix and PayPal use isomorphic loading to render identical HTML on both the server and client.[19][20]

React Native

React Native was announced by Facebook in 2015[21], applying the React architecture to native Android[22], iOS, and UWP[23] applications.


At TechCrunch Disrupt San Francisco 2012, Mark Zuckerberg had the following quote: "Our Biggest Mistake Was Betting Too Much On HTML5" [24]. He promised that Facebook will deliver better mobile experiences very soon.

Inside Facebook, Jordan Walke found a way to generate iOS UI elements from a background Javascript thread. They decided to organize an internal hackathon to perfect this prototype in order to be able to build native apps with this technology.[25].

After few months of development, Facebook released the first version for the React.js Conf 2015. During a technical talk[26], Christopher Chedeau explained that Facebook was already using React Native in production for their Group App and their Ads Manager App[21].

Working Principles

The working principles of React Native are basically the same as ReactJS except that it's not manipulating the DOM via the VirtualDom but some native views. It runs in a background process (which interprets the Javascript written by the developers) directly on the end-device and communicates with the native platform via a serializable, asynchronous and batched Bridge[27].

It can be seen that Facebook corrected the error that Mark Zuckerberg mentioned in 2012: React Native doesn't rely on HTML5 at all, everything is written in Javascript and relies on native SDKs.

Hello World

Hello, World program in React Native looks like that:

import React, { Component } from 'react';
import { AppRegistry, Text } from 'react-native';

export default class HelloWorldApp extends Component {
  render {
    return (
      <Text>Hello world!</Text>

// skip this line if using Create React Native App
AppRegistry.registerComponent('HelloWorld',  => HelloWorldApp);

Future development

Project status can be tracked via the core team discussion forum.[28] However major changes to React go through the Future of React repo, Issues and PR.[29][30] This enables the React community to provide feedback on new potential features, experimental APIs and JavaScript syntax improvements.

Sub projects

The status of the React sub-projects used to be available in the project wiki.[31]

Facebook CLA

Facebook requires contributors to React to sign the Facebook CLA.[32][33]

Criticism of ReactJS

A criticism of ReactJS is that it has high memory (RAM) requirements, since it uses the concept of a "Virtual DOM". This is where, quote: "a representation of a UI is kept in memory and synced with the "real" DOM by a library such as ReactDOM." [34]

Use of ReactJS is associated with high CPU and high memory (RAM) load, as can be seen when running the Linux 'top' utility when browsing ReactJS-heavy sites such as Atlassian Jira.

Licensing 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:[35]

"The license granted hereunder will terminate, automatically and without notice, for anyone that makes any claim (including by filing any lawsuit, assertion or other action) alleging (a) direct, indirect, or contributory infringement or inducement to infringe any patent: (i) by Facebook or any of its subsidiaries or affiliates, whether or not such claim is related to the Software, (ii) by any party if such claim arises in whole or in part from any software, product or service of Facebook or any of its subsidiaries or affiliates, whether or not such claim is related to the Software, or (iii) by any party relating to the Software; or (b) that any right in any patent claim of Facebook is invalid or unenforceable."

This unconventional clause caused some controversy and debate in the React user community, because it could 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.[36]

Based on community feedback, Facebook updated the patent grant in April 2015 to be less ambiguous and more permissive:[37]

"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."[38]

The Apache Software Foundation considered this licensing arrangement to be incompatible with its licensing policies, as it "passes along risk to downstream consumers of our software imbalanced in favor of the licensor, not the licensee, thereby violating our Apache legal policy of being a universal donor", and "are not a subset of those found in the [Apache License 2.0], and they cannot be sublicensed as [Apache License 2.0]."[39]. In August 2017, Facebook dismissed the Apache Foundation's downstream concerns and refused to reconsider their license[40][41], and, the following month, WordPress decided to switch their Gutenberg and Calypso projects away from React.[42]

License change

On September 23, 2017, Facebook announced that the following week, it would re-license Flow, Jest, React, and Immutable.js under a standard MIT License; the company stated that React was "the foundation of a broad ecosystem of open source software for the web", and that they did not want to "hold back forward progress for nontechnical reasons."[43]

On September 26, 2017, React 16.0.0 was released with the MIT license.[44] The MIT license change has also been backported to the 15.x release line with React 15.6.2.[45]


  1. ^ "Releases - Facebook/React". GitHub. 
  2. ^ "A JavaScript library for building user interfaces - React". Retrieved . 
  3. ^ Krill, Paul (May 15, 2014). "React: Making faster, smoother UIs for data-driven Web apps". InfoWorld. 
  4. ^ Hemel, Zef (June 3, 2013). "Facebook's React JavaScript User Interfaces Library Receives Mixed Reviews". InfoQ. 
  5. ^ Dawson, Chris (July 25, 2014). "JavaScript's History and How it Led To ReactJS". The New Stack. 
  6. ^ "Angular vs React: Feature Comparison of JS Tools". ThinkMobiles. February 22, 2017. 
  7. ^ "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. 
  8. ^ "Pete Hunt at TXJS". 
  9. ^ Frederic Lardinois (18 April 2017). "Facebook announces React Fiber, a rewrite of its React framework". TechCrunch. Retrieved 2017. 
  10. ^ "React Fiber Architecture". Github. Retrieved 2017. 
  11. ^
  12. ^
  13. ^
  14. ^ "Refs and the DOM". React Blog. 
  15. ^ "JSX in Depth". Retrieved . 
  16. ^ Clark, Andrew (September 26, 2017). "React v16.0§New render return types: fragments and strings". React Blog. 
  17. ^ Clark, Andrew (September 26, 2017). "React v16.0§Support for custom DOM attributes". React Blog. 
  18. ^ "Why did we build React? - React Blog". 
  19. ^ "PayPal Isomorphic React". 
  20. ^ "Netflix Isomorphic React". 
  21. ^ a b "React Native: Bringing modern web techniques to mobile". 
  22. ^ "Android Release for React Native". 
  23. ^ Windows Apps Team (April 13, 2016). "React Native on the Universal Windows Platform". Retrieved . 
  24. ^ "Mark Zuckerberg on HTML 5 at TechCrunch Disrupt SF 2012". TechCrunch. Retrieved 2018. 
  25. ^ "A short Story about React Native". Retrieved 2018. 
  26. ^ Christopher, Chedeau. "A Deep Dive into React Native". YouTube. Retrieved 2018. 
  27. ^ "Bridging in React Native". 14 October 2015. Retrieved 2018. 
  28. ^ "Meeting Notes". React Discuss. Retrieved . 
  29. ^ "reactjs/react-future - The Future of React". GitHub. Retrieved . 
  30. ^ "facebook/react - Feature request issues". GitHub. Retrieved . 
  31. ^ "facebook/react Projects wiki". GitHub. Retrieved . 
  32. ^ "facebook/react -". GitHub. Retrieved . 
  33. ^ "Contributing to Facebook Projects". Facebook Code. Retrieved . 
  34. ^
  35. ^ "React". GitHub. 
  36. ^ Liu, Austin. "A compelling reason not to use ReactJS". Medium. 
  37. ^ "Updating Our Open Source Patent Grant". 
  38. ^ "Additional Grant of Patent Rights Version 2". GitHub. 
  39. ^ "ASF Legal Previously Asked Questions". Apache Software Foundation. Retrieved . 
  40. ^ "Explaining React's License". Facebook. Retrieved . 
  41. ^ "Consider re-licensing to AL v2.0, as RocksDB has just done". Github. Retrieved . 
  42. ^ "WordPress to ditch React library over Facebook patent clause risk". TechCrunch. Retrieved . 
  43. ^ "Relicensing React, Jest, Flow, and Immutable.js". Facebook Code. 2017-09-23. 
  44. ^ Clark, Andrew (September 26, 2017). "React v16.0§MIT licensed". React Blog. 
  45. ^ Hunzaker, Nathan (September 25, 2017). "React v15.6.2". React Blog. 

External links

  This article uses material from the Wikipedia page available here. It is released under the Creative Commons Attribution-Share-Alike License 3.0.



Connect with defaultLogic
What We've Done
Led Digital Marketing Efforts of Top 500 e-Retailers.
Worked with Top Brands at Leading Agencies.
Successfully Managed Over $50 million in Digital Ad Spend.
Developed Strategies and Processes that Enabled Brands to Grow During an Economic Downturn.
Taught Advanced Internet Marketing Strategies at the graduate level.

Manage research, learning and skills at defaultLogic. Create an account using LinkedIn or facebook to manage and organize your Digital Marketing and Technology knowledge. defaultLogic works like a shopping cart for information -- helping you to save, discuss and share.

  Contact Us