16.0.0 (September 26, 2017)
Learn more in the React 16.0 announcement post!
New JS Environment Requirements
- React 16 depends on the collection types Map and Set, as well as requestAnimationFrame. If you support older browsers and devices which may not yet provide these natively (e.g. <IE11), you may want to include a polyfill.
- Components can now return arrays and strings from
render. (Docs coming soon!)
- First-class support for declaratively rendering a subtree into another DOM node with
ReactDOM.createPortal(). (Docs coming soon!)
- Streaming mode for server side rendering is enabled with
ReactDOMServer.renderToStaticNodeStream(). (@aickin in #10425, #10044, #10039, #10024, #9264, and others.)
- React DOM now allows passing non-standard attributes. (@nhunzaker in #10385, 10564, #10495 and others)
- There are several changes to the behavior of scheduling and lifecycle methods:
nullif called from inside a lifecycle method.
- Minor changes to
setStatewith null no longer triggers an update. This allows you to decide in an updater function if you want to re-render.
setStatedirectly in render always causes an update. This was not previously the case. Regardless, you should not be calling
setStatecallback (second argument) now fires immediately after
componentDidUpdateinstead of after all components have rendered.
- When replacing
B.componentWillMountnow always happens before
A.componentWillUnmountcould fire first in some cases.
- Previously, changing the
refto a component would always detach the ref before that component's render is called. Now, we change the
reflater, when applying the changes to the DOM.
- It is not safe to re-render into a container that was modified by something other than React. This worked previously in some cases but was never supported. We now emit a warning in this case. Instead you should clean up your component trees using
ReactDOM.unmountComponentAtNode. See this example.
componentDidUpdatelifecycle no longer receives
prevContextparam. (@bvaughn in #8631)
- Non-unique keys may now cause children to be duplicated and/or omitted. Using non-unique keys is not (and has never been) supported, but previously it was a hard error.
- Shallow renderer no longer calls
componentDidUpdate()because DOM refs are not available. This also makes it consistent with
componentDidMount()(which does not get called in previous versions either).
- Shallow renderer does not implement
ReactDOM.unstable_batchedUpdatesnow only takes one extra argument after the callback.
- The names and paths to the single-file browser builds have changed to emphasize the difference between development and production builds. For example:
- The server renderer has been completely rewritten, with some improvements:
- Server rendering does not use markup validation anymore, and instead tries its best to attach to existing DOM, warning about inconsistencies. It also doesn't use comments for empty components and data-reactid attributes on each node anymore.
- Hydrating a server rendered container now has an explicit API. Use
ReactDOM.renderif you're reviving server rendered HTML. Keep using
ReactDOM.renderif you're just doing client-side rendering.
- When "unknown" props are passed to DOM components, for valid values, React will now render them in the DOM. See this post for more details. (@nhunzaker in #10385, 10564, #10495 and others)
- Errors in the render and lifecycle methods now unmount the component tree by default. To prevent this, add error boundaries to the appropriate places in the UI.
- There is no
react-with-addons.jsbuild anymore. All compatible addons are published separately on npm, and have single-file browser versions if you need them.
- The deprecations introduced in 15.x have been removed from the core package.
React.createClassis now available as create-react-class,
React.DOMas react-dom-factories, react-addons-test-utils as react-dom/test-utils, and shallow renderer as react-test-renderer/shallow. See 15.5.0 and 15.6.0 blog posts for instructions on migrating code and automated codemods.
- 131 KB react-dom-server.browser.development.js
- 14.6 KB react-dom-server.browser.production.min.js
- 85.2 KB react-dom-unstable-native-dependencies.development.js
- 15 KB react-dom-unstable-native-dependencies.production.min.js
- 630 KB react-dom.development.js
- 100 KB react-dom.production.min.js
- 62.9 KB react.development.js
- 6.43 KB react.production.min.js
- Source code (zip)
- Source code (tar.gz)
15.6.0 (June 13, 2017)
- Downgrade deprecation warnings to use
console.error. (@flarnie in #9753)
- Add a deprecation warning for
React.createClass. Points users to
create-react-classinstead. (@flarnie in #9771)
- Add deprecation warnings and separate module for
React.DOMfactory helpers. (@nhunzaker in #8356)
- Warn for deprecation of
React.createMixinhelper, which was never used. (@aweary in #8853)
- Add support for CSS variables in
styleattribute. (@aweary in #9302)
- Add support for CSS Grid style properties. (@ericsakmar in #9185)
- Fix bug where inputs mutated value on type conversion. (@nhunzaker in #9806)
- Fix issues with
onChangenot firing properly for some inputs. (@jquense in #8575)
- Fix bug where controlled number input mistakenly allowed period. (@nhunzaker in #9584)
- Fix bug where performance entries were being cleared. (@chrisui in #9451)
- Fix AMD support for addons depending on
react. (@flarnie in #9919)
componentWillUnmount. (@mridgway in #9638)
react-addons-updateto not depend on native
Object.assign. (@gaearon in #9937)
- Remove broken Google Closure Compiler annotation from
create-react-class. (@gaearon in #9933)
- Remove unnecessary dependency from
react-linked-input. (@gaearon in #9766)
react-addons-(css-)transition-groupto the new package. (@gaearon in #9937)
15.5.4 (April 11, 2017)
- Critical Bugfix: Update the version of
prop-typesto fix critical bug. (@gaearon in 545c87f)
react-addons-create-fragmentpackage to include
loose-envifytransform for Browserify users. (@mridgway in #9642)
React Test Renderer