Updatify / React | Release notes

Create your changelog

Free, open-source JavaScript library maintained by Meta (Facebook) and a community of developers

Update Jun 8, 2026 tracked by Updatify

16.8.2 (February 14, 2019)

React DOM

  • Fix ReactDOM.render being ignored inside useEffect. (@gaearon in #14799)
  • Fix a crash when unmounting empty portals. (@gaearon in #14820)
  • Fix useImperativeHandle to work correctly when no deps are specified. (@gaearon in #14801)
  • Fix crossOrigin attribute to work in SVG image elements. (@aweary in #14832)
  • Fix a false positive warning when using Suspense with Hooks. (@gaearon in #14821)

React Test Utils and React Test Renderer

Update Jun 8, 2026 tracked by Updatify

16.8.0 (February 6, 2019)

React

  • Add Hooks — a way to use state and other React features without writing a class. (@acdlite et al. in #13968)
  • Improve the useReducer Hook lazy initialization API. (@acdlite in #14723)

React DOM

  • Bail out of rendering on identical values for useState and useReducer Hooks. (@acdlite in #14569)
  • Use Object.is algorithm for comparing useState and useReducer values. (@Jessidhia in #14752)
  • Don’t compare the first argument passed to useEffect/useMemo/useCallback Hooks. (@acdlite in #14594)
  • Support synchronous thenables passed to React.lazy(). (@gaearon in #14626)
  • Render components with Hooks twice in Strict Mode (DEV-only) to match class behavior. (@gaearon in #14654)
  • Warn about mismatching Hook order in development. (@threepointone in #14585 and @acdlite in #14591)
  • Effect clean-up functions must return either undefined or a function. All other values, including null, are not allowed. @acdlite in #14119

React Test Renderer and Test Utils

  • Support Hooks in the shallow renderer. (@trueadm in #14567)
  • Fix wrong state in shouldComponentUpdate in the presence of getDerivedStateFromProps for Shallow Renderer. (@chenesan in #14613)
  • Add ReactTestRenderer.act() and ReactTestUtils.act() for batching updates so that tests more closely match real behavior. (@threepointone in #14744)

ESLint Plugin: React Hooks

Update Jun 8, 2026 tracked by Updatify

16.7.0 (December 19, 2018)

React DOM

  • Fix performance of React.lazy for large numbers of lazily-loaded components. (@acdlite in #14429)
  • Clear fields on unmount to avoid memory leaks. (@trueadm in #14276)
  • Fix bug with SSR and context when mixing react-dom/server@16.6 and react@<16.6. (@gaearon in #14291)
  • Fix a performance regression in profiling mode. (@bvaughn in #14383)

Scheduler (Experimental)

Update Jun 8, 2026 tracked by Updatify

16.6.3 (November 12, 2018)

React DOM

React DOM Server

  • Fix incorrect sharing of context state between renderToNodeStream() calls. (@sebmarkbage in #14182)
  • Add a warning about incorrect usage of the context API. (@trueadm in #14033)

Update Jun 8, 2026 tracked by Updatify

16.6.2 (November 12, 2018)

This release was published in a broken state and should be skipped.

Update Jun 8, 2026 tracked by Updatify

16.6.1 (November 6, 2018)

React DOM

  • Fallback should not remount every time a promise resolves. (@acdlite in #14083)
  • Fix bug where Suspense keeps showing fallback even after everything finishes loading. (@acdlite in #14083)
  • Fix a crash when Suspense finishes loading in IE11. (@sophiebits in #14126)
  • Fix unresolved default props in lifecycle methods of a lazy component. (@gaearon in #14112)
  • Fix bug when recovering from an error thrown during complete phase. (@gaearon in #14104)

Scheduler (Experimental)

  • Switch from deadline object to shouldYield API. (@acdlite in #14025)

Update Jun 8, 2026 tracked by Updatify

16.6.0 (October 23, 2018)

React

React DOM

  • Add contextType as a more ergonomic way to subscribe to context from a class. (@bvaughn in #13728)
  • Add getDerivedStateFromError lifecycle method for catching errors in a future asynchronous server-side renderer. (@bvaughn in #13746)
  • Warn when <Context> is used instead of <Context.Consumer>. (@trueadm in #13829)
  • Fix gray overlay on iOS Safari. (@philipp-spiess in #13778)
  • Fix a bug caused by overwriting window.event in development. (@sergei-startsev in #13697)

React DOM Server

Scheduler (Experimental)

Update Jun 8, 2026 tracked by Updatify

16.5.2 (September 18, 2018)

React DOM

Schedule (Experimental)

  • Renaming “tracking” API to “tracing” (@bvaughn in #13641)
  • Add UMD production+profiling entry points (@bvaughn in #13642)
  • Refactored schedule to remove some React-isms and improve performance for when deferred updates time out (@acdlite in #13582)

Update Jun 8, 2026 tracked by Updatify

16.5.1 (September 13, 2018)

React

  • Improve the warning when React.forwardRef receives an unexpected number of arguments. (@andresroberto in #13636)

React DOM

  • Fix a regression in unstable exports used by React Native Web. (@aweary in #13598)
  • Fix a crash when component defines a method called isReactComponent. (@gaearon in #13608)
  • Fix a crash in development mode in IE9 when printing a warning. (@link-alex in #13620)
  • Provide a better error message when running react-dom/profiling with schedule/tracking. (@bvaughn in #13605)
  • If a ForwardRef component defines a displayName, use it in warnings. (@probablyup in #13615)

Schedule (Experimental)

  • Add a separate profiling entry point at schedule/tracking-profiling. (@bvaughn in #13605)

Update Jun 8, 2026 tracked by Updatify

16.5.0 (September 5, 2018)

React

  • Add a warning if React.forwardRef render function doesn’t take exactly two arguments (@bvaughn in #13168)
  • Improve the error message when passing an element to createElement by mistake (@DCtheTall in #13131)
  • Don’t call profiler onRender until after mutations (@bvaughn in #13572)

React DOM

  • Add support for React DevTools Profiler (@bvaughn in #13058)
  • Add react-dom/profiling entry point alias for profiling in production (@bvaughn in #13570)
  • Add onAuxClick event for browsers that support it (@jquense in #11571)
  • Add movementX and movementY fields to mouse events (@jasonwilliams in #9018)
  • Add tangentialPressure and twist fields to pointer events (@motiz88 in #13374)
  • Minimally support iframes (nested browsing contexts) in selection event handling (@acusti in #12037)
  • Support passing booleans to the focusable SVG attribute (@gaearon in #13339)
  • Ignore <noscript> on the client when hydrating (@Ephem in #13537)
  • Fix gridArea to be treated as a unitless CSS property (@mgol in #13550)
  • Fix incorrect data in compositionend event when typing Korean on IE11 (@crux153 in #12563)
  • Fix a crash when using dynamic children in the <option> tag (@Slowyn in #13261, @gaearon in #13465)
  • Fix the checked attribute not getting initially set on the input (@dilidili in #13114)
  • Fix hydration of dangerouslySetInnerHTML when __html is not a string (@gaearon in #13353)
  • Fix a warning about missing controlled onChange to fire on falsy values too (@nicolevy in #12628)
  • Fix submit and reset buttons getting an empty label (@ellsclytn in #12780)
  • Fix the onSelect event not being triggered after drag and drop (@gaearon in #13422)
  • Fix the onClick event not working inside a portal on iOS (@aweary in #11927)
  • Fix a performance issue when thousands of roots are re-rendered (@gaearon in #13335)
  • Fix a performance regression that also caused onChange to not fire in some cases (@gaearon in #13423)
  • Handle errors in more edge cases gracefully (@gaearon in #13237 and @acdlite in #13269)
  • Don’t use proxies for synthetic events in development (@gaearon in #12171)
  • Warn when "false" or "true" is the value of a boolean DOM prop (@motiz88 in #13372)
  • Warn when this.state is initialized to props (@veekas in #11658)
  • Don’t compare style on hydration in IE due to noisy false positives (@mgol in #13534)
  • Include StrictMode in the component stack (@gaearon in #13240)
  • Don’t overwrite window.event in IE (@ConradIrwin in #11696)
  • Improve component stack for the folder/index.js naming convention (@gaearon in #12059)
  • Improve a warning when using getDerivedStateFromProps without initialized state (@flxwu in #13317)
  • Improve a warning about invalid textarea usage (@raunofreiberg in #13361)
  • Treat invalid Symbol and function values more consistently (@raunofreiberg in #13362 and #13389)
  • Allow Electron <webview> tag without warnings (@philipp-spiess in #13301)
  • Don’t show the uncaught error addendum if e.preventDefault() was called (@gaearon in #13384)
  • Warn about rendering Generators (@gaearon in #13312)
  • Remove irrelevant suggestion of a legacy method from a warning (@zx6658 in #13169)
  • Remove unstable_deferredUpdates in favor of unstable_scheduleWork from schedule (@gaearon in #13488)
  • Fix unstable asynchronous mode from doing unnecessary work when an update takes too long (@acdlite in #13503)

React DOM Server

React Test Renderer and Test Utils

  • Fix this in a functional component for shallow renderer to be undefined (@koba04 in #13144)
  • Deprecate a Jest-specific ReactTestUtils.mockComponent() helper (@bvaughn in #13193)
  • Warn about ReactDOM.createPortal usage within the test renderer (@bvaughn in #12895)
  • Improve a confusing error message (@gaearon in #13351)

React ART

Schedule (Experimental)

  • New package for cooperatively scheduling work in a browser environment. It’s used by React internally, but its public API is not finalized yet. (@flarnie in #12624)

Update Jun 8, 2026 tracked by Updatify

16.4.2 (August 1, 2018)

React DOM Server

Update Jun 8, 2026 tracked by Updatify

16.4.1 (June 13, 2018)

React

  • You can now assign propTypes to components returned by React.ForwardRef. (@bvaughn in #12911)

React DOM

  • Fix a crash when the input type changes from some other types to text. (@spirosikmd in #12135)
  • Fix a crash in IE11 when restoring focus to an SVG element. (@ThaddeusJiang in #12996)
  • Fix a range input not updating in some cases. (@Illu in #12939)
  • Fix input validation triggering unnecessarily in Firefox. (@nhunzaker in #12925)
  • Fix an incorrect event.target value for the onChange event in IE9. (@nhunzaker in #12976)
  • Fix a false positive error when returning an empty <React.Fragment /> from a component. (@philipp-spiess in #12966)

React DOM Server

React Test Renderer

  • Allow multiple root children in test renderer traversal API. (@gaearon in #13017)
  • Fix getDerivedStateFromProps() in the shallow renderer to not discard the pending state. (@fatfisz in #13030)

Update Jun 8, 2026 tracked by Updatify

16.4.0 (May 23, 2018)

React

React DOM

  • Add support for the Pointer Events specification. (@philipp-spiess in #12507)
  • Properly call getDerivedStateFromProps() regardless of the reason for re-rendering. (@acdlite in #12600 and #12802)
  • Fix a bug that prevented context propagation in some cases. (@gaearon in #12708)
  • Fix re-rendering of components using forwardRef() on a deeper setState(). (@gaearon in #12690)
  • Fix some attributes incorrectly getting removed from custom element nodes. (@airamrguez in #12702)
  • Fix context providers to not bail out on children if there’s a legacy context provider above. (@gaearon in #12586)
  • Add the ability to specify propTypes on a context provider component. (@nicolevy in #12658)
  • Fix a false positive warning when using react-lifecycles-compat in <StrictMode>. (@bvaughn in #12644)
  • Warn when the forwardRef() render function has propTypes or defaultProps. (@bvaughn in #12644)
  • Improve how forwardRef() and context consumers are displayed in the component stack. (@sophiebits in #12777)
  • Change internal event names. This can break third-party packages that rely on React internals in unsupported ways. (@philipp-spiess in #12629)

React Test Renderer

  • Fix the getDerivedStateFromProps() support to match the new React DOM behavior. (@koba04 in #12676)
  • Fix a testInstance.parent crash when the parent is a fragment or another special node. (@gaearon in #12813)
  • forwardRef() components are now discoverable by the test renderer traversal methods. (@gaearon in #12725)
  • Shallow renderer now ignores setState() updaters that return null or undefined. (@koba04 in #12756)

React ART

  • Fix reading context provided from the tree managed by React DOM. (@acdlite in #12779)

React Call Return (Experimental)

  • This experiment was deleted because it was affecting the bundle size and the API wasn’t good enough. It’s likely to come back in the future in some other form. (@gaearon in #12820)

React Reconciler (Experimental)

Update Jun 8, 2026 tracked by Updatify

16.3.2 (April 16, 2018)

React

  • Improve the error message when passing null or undefined to React.cloneElement. (@nicolevy in #12534)

React DOM

  • Fix an IE crash in development when using <StrictMode>. (@bvaughn in #12546)
  • Fix labels in User Timing measurements for new component types. (@bvaughn in #12609)
  • Improve the warning about wrong component type casing. (@nicolevy in #12533)
  • Improve general performance in development mode. (@gaearon in #12537)
  • Improve performance of the experimental unstable_observedBits API with nesting. (@gaearon in #12543)

React Test Renderer

Update Jun 8, 2026 tracked by Updatify

16.3.1 (April 3, 2018)

React

React DOM

Create Subscription

Update Jun 8, 2026 tracked by Updatify

16.3.0 (March 29, 2018)

React

  • Add a new officially supported context API. (@acdlite in #11818)
  • Add a new React.createRef() API as an ergonomic alternative to callback refs. (@trueadm in #12162)
  • Add a new React.forwardRef() API to let components forward their refs to a child. (@bvaughn in #12346)
  • Fix a false positive warning in IE11 when using React.Fragment. (@XaveScor in #11823)
  • Replace React.unstable_AsyncComponent with React.unstable_AsyncMode. (@acdlite in #12117)
  • Improve the error message when calling setState() on an unmounted component. (@sophiebits in #12347)

React DOM

  • Add a new getDerivedStateFromProps() lifecycle and UNSAFE_ aliases for the legacy lifecycles. (@bvaughn in #12028)
  • Add a new getSnapshotBeforeUpdate() lifecycle. (@bvaughn in #12404)
  • Add a new <React.StrictMode> wrapper to help prepare apps for async rendering. (@bvaughn in #12083)
  • Add support for onLoad and onError events on the <link> tag. (@roderickhsiao in #11825)
  • Add support for noModule boolean attribute on the <script> tag. (@aweary in #11900)
  • Fix minor DOM input bugs in IE and Safari. (@nhunzaker in #11534)
  • Correctly detect Ctrl + Enter in onKeyPress in more browsers. (@nstraub in #10514)
  • Fix containing elements getting focused on SSR markup mismatch. (@koba04 in #11737)
  • Fix value and defaultValue to ignore Symbol values. (@nhunzaker in #11741)
  • Fix refs to class components not getting cleaned up when the attribute is removed. (@bvaughn in #12178)
  • Fix an IE/Edge issue when rendering inputs into a different window. (@M-ZubairAhmed in #11870)
  • Throw with a meaningful message if the component runs after jsdom has been destroyed. (@gaearon in #11677)
  • Don’t crash if there is a global variable called opera with a null value. @alisherdavronov in #11854)
  • Don’t check for old versions of Opera. (@skiritsis in #11921)
  • Deduplicate warning messages about <option selected>. (@watadarkstar in #11821)
  • Deduplicate warning messages about invalid callback. (@yenshih in #11833)
  • Deprecate ReactDOM.unstable_createPortal() in favor of ReactDOM.createPortal(). (@prometheansacrifice in #11747)
  • Don’t emit User Timing entries for context types. (@abhaynikam in #12250)
  • Improve the error message when context consumer child isn’t a function. (@raunofreiberg in #12267)
  • Improve the error message when adding a ref to a functional component. (@skiritsis in #11782)

React DOM Server

  • Prevent an infinite loop when attempting to render portals with SSR. (@gaearon in #11709)
  • Warn if a class doesn’t extend React.Component. (@wyze in #11993)
  • Fix an issue with this.state of different components getting mixed up. (@sophiebits in #12323)
  • Provide a better message when component type is undefined. (@HeroProtagonist in #11966)

React Test Renderer

  • Fix handling of fragments in toTree(). (@maciej-ka in #12107 and @gaearon in #12154)
  • Shallow renderer should assign state to null for components that don’t set it. (@jwbay in #11965)
  • Shallow renderer should filter legacy context according to contextTypes. (@koba04 in #11922)
  • Add an unstable API for testing asynchronous rendering. (@acdlite in #12478)

React Is (New)

  • First release of the new package that libraries can use to detect different React node types. (@bvaughn in #12199)
  • Add ReactIs.isValidElementType() to help higher-order components validate their inputs. (@jamesreggio in #12483)

React Lifecycles Compat (New)

Create Subscription (New)

React Reconciler (Experimental)

  • Expose react-reconciler/persistent for building renderers that use persistent data structures. (@gaearon in #12156)
  • Pass host context to finalizeInitialChildren(). (@jquense in #11970)
  • Remove useSyncScheduling from the host config. (@acdlite in #11771)

React Call Return (Experimental)

Update Jun 8, 2026 tracked by Updatify

16.2.0 (November 28, 2017)

React

  • Add Fragment as named export to React. (@clemmy in #10783)
  • Support experimental Call/Return types in React.Children utilities. (@MatteoVH in #11422)

React DOM

  • Fix radio buttons not getting checked when using multiple lists of radios. (@landvibe in #11227)
  • Fix radio buttons not receiving the onChange event in some cases. (@jquense in #11028)

React Test Renderer

  • Fix setState() callback firing too early when called from componentWillMount. (@accordeiro in #11507)

React Reconciler

  • Expose react-reconciler/reflection with utilities useful to custom renderers. (@rivenhk in #11683)

Internal Changes

Update Jun 8, 2026 tracked by Updatify

16.1.1 (November 13, 2017)

React

  • Improve the warning about undefined component type. (@selbekk in #11505)

React DOM

React DOM Server

  • Don’t freeze the ReactDOMServer public API. (@travi in #11531)
  • Don’t emit autoFocus={false} attribute on the server. (@gaearon in #11543)

React Reconciler

Update Jun 8, 2026 tracked by Updatify

16.1.0 (November 9, 2017)

Discontinuing Bower Releases

Starting with 16.1.0, we will no longer be publishing new releases on Bower. You can continue using Bower for old releases, or point your Bower configs to the React UMD builds hosted on unpkg that mirror npm releases and will continue to be updated.

All Packages

  • Fix an accidental extra global variable in the UMD builds. (@gaearon in #10935)

React

  • Add support for portals in React.Children utilities. (@MatteoVH in #11378)
  • Warn when a class has a render method but doesn’t extend a known base class. (@sw-yx in #11168)
  • Improve the warning when accidentally returning an object from constructor. (@deanbrophy in #11395)

React DOM

React DOM Server

  • Add a new suppressHydrationWarning attribute for intentional client/server text mismatches. (@sebmarkbage in #11126)
  • Fix markup generation when components return strings. (@gaearon in #11109)
  • Fix obscure error message when passing an invalid style value. (@iamdustan in #11173)
  • Include the autoFocus attribute into SSR markup. (@gaearon in #11192)
  • Include the component stack into more warnings. (@gaearon in #11284)

React Test Renderer and Test Utils

  • Fix multiple setState() calls in componentWillMount() in shallow renderer. (@Hypnosphi in #11167)
  • Fix shallow renderer to ignore shouldComponentUpdate() after forceUpdate(). (@d4rky-pl in #11239 and #11439)
  • Handle forceUpdate() and React.PureComponent correctly. (@koba04 in #11440)
  • Add back support for running in production mode. (@gaearon in #11112)
  • Add a missing package.json dependency. (@gaearon in #11340)

React ART

  • Add a missing package.json dependency. (@gaearon in #11341)
  • Expose react-art/Circle, react-art/Rectangle, and react-art/Wedge. (@gaearon in #11343)

React Reconciler (Experimental)

React Call Return (Experimental)

Update Jun 8, 2026 tracked by Updatify

16.0.0 (September 26, 2017)

New JS Environment Requirements

New Features

  • Components can now return arrays and strings from render. (Docs coming soon!)
  • Improved error handling with introduction of “error boundaries”. Error boundaries are React components that catch JavaScript errors anywhere in their child component tree, log those errors, and display a fallback UI instead of the component tree that crashed.
  • 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.renderToNodeStream() and 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)

Breaking Changes

  • There are several changes to the behavior of scheduling and lifecycle methods:
    • ReactDOM.render() and ReactDOM.unstable_renderIntoContainer() now return null if called from inside a lifecycle method.
    • Minor changes to setState behavior:
      • Calling setState with null no longer triggers an update. This allows you to decide in an updater function if you want to re-render.
      • Calling setState directly in render always causes an update. This was not previously the case. Regardless, you should not be calling setState from render.
      • setState callback (second argument) now fires immediately after componentDidMount / componentDidUpdate instead of after all components have rendered.
    • When replacing <A /> with <B />, B.componentWillMount now always happens before A.componentWillUnmount. Previously, A.componentWillUnmount could fire first in some cases.
    • Previously, changing the ref to a component would always detach the ref before that component’s render is called. Now, we change the ref later, 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.
    • componentDidUpdate lifecycle no longer receives prevContext param. (@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 unstable_batchedUpdates() anymore.
    • ReactDOM.unstable_batchedUpdates now 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:
    • react/dist/react.jsreact/umd/react.development.js
    • react/dist/react.min.jsreact/umd/react.production.min.js
    • react-dom/dist/react-dom.jsreact-dom/umd/react-dom.development.js
    • react-dom/dist/react-dom.min.jsreact-dom/umd/react-dom.production.min.js
  • 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.hydrate instead of ReactDOM.render if you’re reviving server rendered HTML. Keep using ReactDOM.render if 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.

Removed Deprecations

  • There is no react-with-addons.js build 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.createClass is now available as create-react-class, React.PropTypes as prop-types, React.DOM as 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.

Update Jun 8, 2026 tracked by Updatify

15.6.2 (September 25, 2017)

All Packages

  • Switch from BSD + Patents to MIT license

React DOM

  • Fix a bug where modifying document.documentMode would trigger IE detection in other browsers, breaking change events. (@aweary in #10032)
  • CSS Columns are treated as unitless numbers. (@aweary in #10115)
  • Fix bug in QtWebKit when wrapping synthetic events in proxies. (@walrusfruitcake in #10115)
  • Prevent event handlers from receiving extra argument in development. (@aweary in #10115)
  • Fix cases where onChange would not fire with defaultChecked on radio inputs. (@jquense in #10156)
  • Add support for controlList attribute to allowed DOM properties (@nhunzaker in #9940)
  • Fix a bug where creating an element with a ref in a constructor did not throw an error in development. (@iansu in #10025)

Update Jun 8, 2026 tracked by Updatify

15.6.0 (June 13, 2017)

React

  • Downgrade deprecation warnings to use console.warn instead of console.error. (@flarnie in #9753)
  • Add a deprecation warning for React.createClass. Points users to create-react-class instead. (@flarnie in #9771)
  • Add deprecation warnings and separate module for React.DOM factory helpers. (@nhunzaker in #8356)
  • Warn for deprecation of React.createMixin helper, which was never used. (@aweary in #8853)

React DOM

  • Add support for CSS variables in style attribute. (@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 onChange not 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)

React Addons

  • Fix AMD support for addons depending on react. (@flarnie in #9919)
  • Fix isMounted() to return true in componentWillUnmount. (@mridgway in #9638)
  • Fix react-addons-update to 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)
  • Point react-addons-(css-)transition-group to the new package. (@gaearon in #9937)

Update Jun 8, 2026 tracked by Updatify

15.5.0 (April 7, 2017)

Note: this release has a critical issue and was deprecated. Please update to 15.5.4 or higher.

React

  • <s>Added a deprecation warning for React.createClass. Points users to create-react-class instead. (@acdlite in #d9a4fa4)</s>
  • Added a deprecation warning for React.PropTypes. Points users to prop-types instead. (@acdlite in #043845c)
  • Fixed an issue when using ReactDOM together with ReactDOMServer. (@wacii in #9005)
  • Fixed issue with Closure Compiler. (@anmonteiro in #8895)
  • Another fix for Closure Compiler. (@Shastel in #8882)
  • Added component stack info to invalid element type warning. (@n3tr in #8495)

React DOM

  • Fixed Chrome bug when backspacing in number inputs. (@nhunzaker in #7359)
  • Added react-dom/test-utils, which exports the React Test Utils. (@bvaughn)

React Test Renderer

  • Fixed bug where componentWillUnmount was not called for children. (@gre in #8512)
  • Added react-test-renderer/shallow, which exports the shallow renderer. (@bvaughn)

React Addons

  • Last release for addons; they will no longer be actively maintained.
  • Removed peerDependencies so that addons continue to work indefinitely. (@acdlite and @bvaughn in 8a06cd7 and 67a8db3)
  • Updated to remove references to React.createClass and React.PropTypes (@acdlite in 12a96b9)
  • react-addons-test-utils is deprecated. Use react-dom/test-utils and react-test-renderer/shallow instead. (@bvaughn)

Update Jun 8, 2026 tracked by Updatify

15.4.2 (January 6, 2017)

React

React DOM

  • Fixed a decimal point issue on uncontrolled number inputs. (@nhunzaker in #7750)
  • Fixed rendering of textarea placeholder in IE11. (@aweary in #8020)
  • Worked around a script engine bug in IE9. (@eoin in #8018)

React Addons

Update Jun 8, 2026 tracked by Updatify

15.4.0 (November 16, 2016)

React

  • React package and browser build no longer “secretly” includes React DOM. (@sebmarkbage in #7164 and #7168)
  • Required PropTypes now fail with specific messages for null and undefined. (@chenglou in #7291)
  • Improved development performance by freezing children instead of copying. (@keyanzhang in #7455)

React DOM

  • Fixed occasional test failures when React DOM is used together with shallow renderer. (@goatslacker in #8097)
  • Added a warning for invalid aria- attributes. (@jessebeach in #7744)
  • Added a warning for using autofocus rather than autoFocus. (@hkal in #7694)
  • Removed an unnecessary warning about polyfilling String.prototype.split. (@nhunzaker in #7629)
  • Clarified the warning about not calling PropTypes manually. (@jedwards1211 in #7777)
  • The unstable batchedUpdates API now passes the wrapped function’s return value through. (@bgnorlov in #7444)
  • Fixed a bug with updating text in IE 8. (@mnpenner in #7832)

React Perf

  • When ReactPerf is started, you can now view the relative time spent in components as a chart in Chrome Timeline. (@gaearon in #7549)

React Test Utils

  • If you call Simulate.click() on a <input disabled onClick={foo} /> then foo will get called whereas it didn’t before. (@nhunzaker in #7642)

React Test Renderer

  • Due to packaging changes, it no longer crashes when imported together with React DOM in the same file. (@sebmarkbage in #7164 and #7168)
  • ReactTestRenderer.create() now accepts {createNodeMock: element => mock} as an optional argument so you can mock refs with snapshot testing. (@Aweary in #7649, #8261)

Update Jun 8, 2026 tracked by Updatify

15.3.2 (September 19, 2016)

React

  • Remove plain object warning from React.createElement & React.cloneElement. (@spudly in #7724)

React DOM

  • Add playsInline to supported HTML attributes. (@reaperhulk in #7519)
  • Add as to supported HTML attributes. (@kevinslin in #7582)
  • Improve DOM nesting validation warning about whitespace. (@sophiebits in #7515)
  • Avoid “Member not found” exception in IE10 when calling preventDefault() in Synthetic Events. (@g-palmer in #7411)
  • Fix memory leak in onSelect implementation. (@AgtLucas in #7533)
  • Improve robustness of document.documentMode checks to handle Google Tag Manager. (@SchleyB in #7594)
  • Add more cases to controlled inputs warning. (@marcin-mazurek in #7544)
  • Handle case of popup blockers overriding document.createEvent. (@Andarist in #7621)
  • Fix issue with dangerouslySetInnerHTML and SVG in Internet Explorer. (@zpao in #7618)
  • Improve handling of Japanese IME on Internet Explorer. (@msmania in #7107)

React Test Renderer

React Perf Add-on

  • Ensure lifecycle timers are stopped on errors. (@gaearon in #7548)

Update Jun 8, 2026 tracked by Updatify

15.3.1 (August 19, 2016)

React

React DOM

  • Avoid <input> validation warning from browsers when changing type. (@nhunzaker in #7333)
  • Avoid “Member not found” exception in IE10 when calling stopPropagation() in Synthetic Events. (@nhunzaker in #7343)
  • Fix issue resulting in inability to update some <input> elements in mobile browsers. (@keyanzhang in #7397)
  • Fix memory leak in server rendering. (@keyanzhang in #7410)
  • Fix issue resulting in <input type="range"> values not updating when changing min or max. (@troydemonbreun in #7486)
  • Add new warning for rare case of attempting to unmount a container owned by a different copy of React. (@ventuno in #7456)

React Test Renderer

  • Fix ReactTestInstance::toJSON() with empty top-level components. (@Morhaus in #7523)

React Native Renderer

  • Change trackedTouchCount invariant into a console.error for better reliability. (@yungsters in #7400)

Update Jun 8, 2026 tracked by Updatify

15.3.0 (July 29, 2016)

React

  • Add React.PureComponent - a new base class to extend, replacing react-addons-pure-render-mixin now that mixins don’t work with ES2015 classes. (@sophiebits in #7195)
  • Add new warning when modifying this.props.children. (@jimfb in #7001)
  • Fixed issue with ref resolution order. (@gaearon in #7101)
  • Warn when mixin is undefined. (@swaroopsm in #6158)
  • Downgrade “unexpected batch number” invariant to a warning. (@sophiebits in #7133)
  • Validate arguments to oneOf and oneOfType PropTypes sooner. (@troydemonbreun in #6316)
  • Warn when calling PropTypes directly. (@Aweary in #7132, #7194)
  • Improve warning when using Maps as children. (@keyanzhang in #7260)
  • Add additional type information to the PropTypes.element warning. (@alexzherdev in #7319)
  • Improve component identification in no-op setState warning. (@keyanzhang in #7326)

React DOM

  • Fix issue with nested server rendering. (@Aweary in #7033)
  • Add xmlns, xmlnsXlink to supported SVG attributes. (@salzhrani in #6471)
  • Add referrerPolicy to supported HTML attributes. (@Aweary in #7274)
  • Fix issue resulting in <input type="range"> initial value being rounded. (@troydemonbreun in #7251)

React Test Renderer

React Perf Add-on

  • Fix issue resulting in excessive warnings when encountering an internal measurement error. (@sassanh in #7299)

React TestUtils Add-on

  • Implement type property on for events created via TestUtils.Simulate.*. (@yaycmyk in #6154)
  • Fix crash when running TestUtils with the production build of React. (@gaearon in #7246)

Update Jun 8, 2026 tracked by Updatify

15.2.1 (July 8, 2016)

React

  • Fix errant warning about missing React element. (@gaearon in #7193)
  • Better removal of dev-only code, leading to a small reduction in the minified production bundle size. (@gaearon in #7188, #7189)

React DOM

  • Add stack trace to null input value warning. (@jimfb in #7040)
  • Fix webcomponents example. (@jalexanderfox in #7057)
  • Fix unstable_renderSubtreeIntoContainer so that context properly updates when linked to state. (@gaearon in #7125)
  • Improve invariant wording for void elements. (@starkch in #7066)
  • Ensure no errors are thrown due to event handlers in server rendering. (@rricard in #7127)
  • Fix regression resulting in value-less submit and reset inputs removing the browser-default text. (@zpao in #7197)
  • Fix regression resulting in empty name attribute being added to inputs when not provided. (@okonet in #7199)
  • Fix issue with nested server rendering. (@Aweary in #7033)

React Perf Add-on

  • Make ReactPerf.start() work properly during lifecycle methods. (@gaearon in #7208).

React CSSTransitionGroup Add-on

  • Fix issue resulting in spurious unknown property warnings. (@batusai513 in #7165)

React Native Renderer

  • Improve error handling in cross-platform touch event handling. (@yungsters in #7143)

Update Jun 8, 2026 tracked by Updatify

15.2.0 (July 1, 2016)

React

  • Add error codes to production invariants, with links to the view the full error text. (@keyanzhang in #6948)
  • Include component stack information in PropType validation warnings. (@troydemonbreun in #6398, @sophiebits in #6771)
  • Include component stack information in key warnings. (@keyanzhang in #6799)
  • Stop validating props at mount time, only validate at element creation. (@keyanzhang in #6824)
  • New invariant providing actionable error in missing instance case. (@yungsters in #6990)
  • Add React.PropTypes.symbol to support ES2015 Symbols as props. (@puradox in #6377)
  • Fix incorrect coercion of ref or key that are undefined in development (@gaearon in #6880)
  • Fix a false positive when passing other element’s props to cloneElement (@ericmatthys in #6268)
  • Warn if you attempt to define childContextTypes on a functional component (@Aweary in #6933)

React DOM

  • Add warning for unknown properties on DOM elements. (@jimfb in #6800, @gm758 in #7152)
  • Properly remove attributes from custom elements. (@grassator in #6748)
  • Fix invalid unicode escape in attribute name regular expression. (@nbjahan in #6772)
  • Add onLoad handling to <link> element. (@roderickhsiao in #6815)
  • Add onError handling to <source> element. (@wadahiro in #6941)
  • Handle value and defaultValue more accurately in the DOM. (@jimfb in #6406)
  • Fix events issue in environments with mutated Object.prototype. (@Weizenlol in #6886)
  • Fix issue where is="null" ended up in the DOM in Firefox. (@darobin in #6896)
  • Improved performance of text escaping by using escape-html. (@aickin in #6862)
  • Fix issue with dangerouslySetInnerHTML and SVG in Internet Explorer. (@joshhunt in #6982)
  • Fix issue with <textarea> placeholders. (@jimfb in #7002)
  • Fix controlled vs uncontrolled detection of <input type="radio"/>. (@jimfb in #7003)
  • Improve performance of updating text content. (@trueadm in #7005)
  • Ensure controlled <select> components behave the same on initial render as they do on updates. (@yiminghe in #5362)

React Perf Add-on

React CSSTransitionGroup Add-on

React Native Renderer

  • Dependencies on React Native modules use CommonJS requires instead of providesModule. (@davidaurelio in #6715)

Update Jun 8, 2026 tracked by Updatify

15.1.0 (May 20, 2016)

React

  • Ensure we’re using the latest object-assign, which has protection against a non-spec-compliant native Object.assign. (@zpao in #6681)
  • Add a new warning to communicate that props objects passed to createElement must be plain objects. (@richardscarrott in #6134)
  • Fix a batching bug resulting in some lifecycle methods incorrectly being called multiple times. (@sophiebits in #6650)

React DOM

  • Fix regression in custom elements support. (@jscissr in #6570)
  • Stop incorrectly warning about using onScroll event handler with server rendering. (@Aweary in #6678)
  • Fix grammar in the controlled input warning. (@jakeboone02 in #6657)
  • Fix issue preventing <object> nodes from being able to read <param> nodes in IE. (@syranide in #6691)
  • Fix issue resulting in crash when using experimental error boundaries with server rendering. (@jimfb in #6694)
  • Add additional information to the controlled input warning. (@borisyankov in #6341)

React Perf Add-on

  • Completely rewritten to collect data more accurately and to be easier to maintain. (@gaearon in #6647, #6046)

React Native Renderer

Update Jun 8, 2026 tracked by Updatify

15.0.2 (April 29, 2016)

React

  • Removed extraneous files from npm package. (@gaearon in #6388)
  • Ensure componentWillUnmount is only called once. (@jimfb in #6613)

ReactDOM

  • Fixed bug resulting in disabled buttons responding to mouse events in IE. (@nhunzaker in #6215)
  • Ensure <option>s are correctly selected when inside <optgroup>. (@trevorsmith in #6442)
  • Restore support for rendering into a shadow root. (@Wildhoney in #6462)
  • Ensure nested <body> elements are caught when warning for invalid markup. (@keyanzhang in #6469)
  • Improve warning when encountering multiple elements with the same key. (@hkal in #6500)

React TestUtils Add-on

  • Ensure that functional components do not have an owner. (@gaearon in #6362)
  • Handle invalid arguments to scryRenderedDOMComponentsWithClass better. (@ipeters90 in #6529)

React Perf Add-on

  • Ignore DOM operations that occur outside the batch operation. (@gaearon in #6516)

React Native Renderer

  • These files are now shipped inside the React npm package. They have no impact on React core or ReactDOM.

Update Jun 8, 2026 tracked by Updatify

15.0.0 (April 7, 2016)

Major changes

  • Initial render now uses document.createElement instead of generating HTML. Previously we would generate a large string of HTML and then set node.innerHTML. At the time, this was decided to be faster than using document.createElement for the majority of cases and browsers that we supported. Browsers have continued to improve and so overwhelmingly this is no longer true. By using createElement we can make other parts of React faster. (@sophiebits in #5205)
  • data-reactid is no longer on every node. As a result of using document.createElement, we can prime the node cache as we create DOM nodes, allowing us to skip a potential lookup (which used the data-reactid attribute). Root nodes will have a data-reactroot attribute and server generated markup will still contain data-reactid. (@sophiebits in #5205)
  • No more extra <span>s. ReactDOM will now render plain text nodes interspersed with comment nodes that are used for demarcation. This gives us the same ability to update individual pieces of text, without creating extra nested nodes. If you were targeting these <span>s in your CSS, you will need to adjust accordingly. You can always render them explicitly in your components. (@mwiencek in #5753)
  • Rendering null now uses comment nodes. Previously null would render to <noscript> elements. We now use comment nodes. This may cause issues if making use of :nth-child CSS selectors. While we consider this rendering behavior an implementation detail of React, it’s worth noting the potential problem. (@sophiebits in #5451)
  • Functional components can now return null. We added support for defining stateless components as functions in React 0.14. However, React 0.14 still allowed you to define a class component without extending React.Component or using React.createClass(), so we couldn’t reliably tell if your component is a function or a class, and did not allow returning null from it. This issue is solved in React 15, and you can now return null from any component, whether it is a class or a function. (@jimfb in #5884)
  • Improved SVG support. All SVG tags are now fully supported. (Uncommon SVG tags are not present on the React.DOM element helper, but JSX and React.createElement work on all tag names.) All SVG attributes that are implemented by the browsers should be supported too. If you find any attributes that we have missed, please let us know in this issue. (@zpao in #6243)

Breaking changes

  • No more extra <span>s.
  • React.cloneElement() now resolves defaultProps. We fixed a bug in React.cloneElement() that some components may rely on. If some of the props received by cloneElement() are undefined, it used to return an element with undefined values for those props. We’re changing it to be consistent with createElement(). Now any undefined props passed to cloneElement() are resolved to the corresponding component’s defaultProps. (@truongduy134 in #5997)
  • ReactPerf.getLastMeasurements() is opaque. This change won’t affect applications but may break some third-party tools. We are revamping ReactPerf implementation and plan to release it during the 15.x cycle. The internal performance measurement format is subject to change so, for the time being, we consider the return value of ReactPerf.getLastMeasurements() an opaque data structure that should not be relied upon. (@gaearon in #6286)

Removed deprecations

These deprecations were introduced nine months ago in v0.14 with a warning and are removed:

  • Deprecated APIs are removed from the React top-level export: findDOMNode, render, renderToString, renderToStaticMarkup, and unmountComponentAtNode. As a reminder, they are now available on ReactDOM and ReactDOMServer. (@jimfb in #5832)
  • Deprecated addons are removed: batchedUpdates and cloneWithProps. (@jimfb in #5859, @zpao in #6016)
  • Deprecated component instance methods are removed: setProps, replaceProps, and getDOMNode. (@jimfb in #5570)
  • Deprecated CommonJS react/addons entry point is removed. As a reminder, you should use separate react-addons-* packages instead. This only applies if you use the CommonJS builds. (@gaearon in #6285)
  • Passing children to void elements like <input> was deprecated, and now throws an error. (@jonhester in #3372)
  • React-specific properties on DOM refs (e.g. this.refs.div.props) were deprecated, and are removed now. (@jimfb in #5495)

New deprecations, introduced with a warning

Each of these changes will continue to work as before with a new warning until the release of React 16 so you can upgrade your code gradually.

  • LinkedStateMixin and valueLink are now deprecated due to very low popularity. If you need this, you can use a wrapper component that implements the same behavior: react-linked-input. (@jimfb in #6127)
  • Future versions of React will treat <input value={null}> as a request to clear the input. However, React 0.14 has been ignoring value={null}. React 15 warns you on a null input value and offers you to clarify your intention. To fix the warning, you may explicitly pass an empty string to clear a controlled input, or pass undefined to make the input uncontrolled. (@antoaravinth in #5048)
  • ReactPerf.printDOM() was renamed to ReactPerf.printOperations(), and ReactPerf.getMeasurementsSummaryMap() was renamed to ReactPerf.getWasted(). (@gaearon in #6287)

New helpful warnings

  • If you use a minified copy of the development build, React DOM kindly encourages you to use the faster production build instead. (@sophiebits in #5083)
  • React DOM: When specifying a unit-less CSS value as a string, a future version will not add px automatically. This version now warns in this case (ex: writing style={{width: '300'}}. Unitless number values like width: 300 are unchanged. (@pluma in #5140)
  • Synthetic Events will now warn when setting and accessing properties (which will not get cleared appropriately), as well as warn on access after an event has been returned to the pool. (@kentcdodds in #5940 and @koba04 in #5947)
  • Elements will now warn when attempting to read ref and key from the props. (@prometheansacrifice in #5744)
  • React will now warn if you pass a different props object to super() in the constructor. (@prometheansacrifice in #5346)
  • React will now warn if you call setState() inside getChildContext(). (@raineroviir in #6121)
  • React DOM now attempts to warn for mistyped event handlers on DOM elements, such as onclick which should be onClick. (@ali in #5361)
  • React DOM now warns about NaN values in style. (@jontewks in #5811)
  • React DOM now warns if you specify both value and defaultValue for an input. (@mgmcdermott in #5823)
  • React DOM now warns if an input switches between being controlled and uncontrolled. (@TheBlasfem in #5864)
  • React DOM now warns if you specify onFocusIn or onFocusOut handlers as they are unnecessary in React. (@jontewks in #6296)
  • React now prints a descriptive error message when you pass an invalid callback as the last argument to ReactDOM.render(), this.setState(), or this.forceUpdate(). (@conorhastings in #5193 and @gaearon in #6310)
  • Add-Ons: TestUtils.Simulate() now prints a helpful message if you attempt to use it with shallow rendering. (@conorhastings in #5358)
  • PropTypes: arrayOf() and objectOf() provide better error messages for invalid arguments. (@chicoxyzzy in #5390)

Notable bug fixes

  • Fixed multiple small memory leaks. (@sophiebits in #4983 and @victor-homyakov in #6309)
  • Input events are handled more reliably in IE 10 and IE 11; spurious events no longer fire when using a placeholder. (@jquense in #4051)
  • The componentWillReceiveProps() lifecycle method is now consistently called when context changes. (@milesj in #5787)
  • React.cloneElement() doesn’t append slash to an existing key when used inside React.Children.map(). (@ianobermiller in #5892)
  • React DOM now supports the cite and profile HTML attributes. (@AprilArcus in #6094 and @saiichihashimoto in #6032)
  • React DOM now supports cssFloat, gridRow and gridColumn CSS properties. (@stevenvachon in #6133 and @mnordick in #4779)
  • React DOM now correctly handles borderImageOutset, borderImageWidth, borderImageSlice, floodOpacity, strokeDasharray, and strokeMiterlimit as unitless CSS properties. (@rofrischmann in #6210 and #6270)
  • React DOM now supports the onAnimationStart, onAnimationEnd, onAnimationIteration, onTransitionEnd, and onInvalid events. Support for onLoad has been added to object elements. (@tomduncalf in #5187, @milesj in #6005, and @ara4n in #5781)
  • React DOM now defaults to using DOM attributes instead of properties, which fixes a few edge case bugs. Additionally the nullification of values (ex: href={null}) now results in the forceful removal, no longer trying to set to the default value used by browsers in the absence of a value. (@syranide in #1510)
  • React DOM does not mistakenly coerce children to strings for Web Components. (@jimfb in #5093)
  • React DOM now correctly normalizes SVG <use> events. (@edmellum in #5720)
  • React DOM does not throw if a <select> is unmounted while its onChange handler is executing. (@sambev in #6028)
  • React DOM does not throw in Windows 8 apps. (@Andrew8xx8 in #6063)
  • React DOM does not throw when asynchronously unmounting a child with a ref. (@yiminghe in #6095)
  • React DOM no longer forces synchronous layout because of scroll position tracking. (@syranide in #2271)
  • Object.is is used in a number of places to compare values, which leads to fewer false positives, especially involving NaN. In particular, this affects the shallowCompare add-on. (@chicoxyzzy in #6132)
  • Add-Ons: ReactPerf no longer instruments adding or removing an event listener because they don’t really touch the DOM due to event delegation. (@antoaravinth in #5209)

Other improvements

  • React now uses loose-envify instead of envify so it installs fewer transitive dependencies. (@qerub in #6303)
  • Shallow renderer now exposes getMountedInstance(). (@glenjamin in #4918)
  • Shallow renderer now returns the rendered output from render(). (@simonewebdesign in #5411)
  • React no longer depends on ES5 shams for Object.create and Object.freeze in older environments. It still, however, requires ES5 shims in those environments. (@dgreensp in #4959)
  • React DOM now allows data- attributes with names that start with numbers. (@nLight in #5216)
  • React DOM adds a new suppressContentEditableWarning prop for components like Draft.js that intentionally manage contentEditable children with React. (@mxstbr in #6112)
  • React improves the performance for createClass() on complex specs. (@sophiebits in #5550)

Update Jun 8, 2026 tracked by Updatify

0.14.7 (January 28, 2016)

React

  • Fixed bug with <option> tags when using dangerouslySetInnerHTML
  • Fixed memory leak in synthetic event system

React TestUtils Add-on

  • Fixed bug with calling setState in componentWillMount when using shallow rendering

Update Jun 8, 2026 tracked by Updatify

0.14.6 (January 6, 2016)

React

  • Updated fbjs dependency to pick up change affecting handling of undefined document.