NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #476 most downloaded on npm
React package for working with the DOM.
Last release 3 days ago
02 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
12 versions withdrawn
withdrawn after publishing
12 years old
2916 releases · first in 2014
Nothing published for this version
Improve performance of development builds in various ways. (@gaearon in #7461, #7463, #7483, #7488, #7491, #7510)
React.Children.only. (@spicyj in #7514)<input> validation warning from browsers when changing type. (@nhunzaker in #7333)stopPropagation() in Synthetic Events. (@nhunzaker in #7343)<input> elements in mobile browsers. (@keyanzhang in #7397)<input type="range"> values not updating when changing min or max. (@troydemonbreun in #7486)trackedTouchCount invariant into a console.error for better reliability. (@yungsters in #7400)One column per quarter.
Nothing published for this version
Nothing published for this version
Add React.PureComponent - a new base class to extend, replacing react-addons-pure-render-mixin now that mixins don't work with ES2015 classes. (@spicy
React.PureComponent - a new base class to extend, replacing react-addons-pure-render-mixin now that mixins don't work with ES2015 classes. (@spicyj in #7195)this.props.children. (@jimfb in #7001)oneOf and oneOfType PropTypes sooner. (@troydemonbreun in #6316)PropTypes.element warning. (@alexzherdev in #7319)setState warning. (@keyanzhang in #7326)xmlns, xmlnsXlink to supported SVG attributes. (@salzhrani in #6471)referrerPolicy to supported HTML attributes. (@Aweary in #7274)<input type="range"> initial value being rounded. (@troydemonbreun in #7251)npm install react-test-renderer. (@spicyj in #6944, #7258, @iamdustan in #7362)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix errant warning about missing React element. (@gaearon in #7193)
unstable_renderSubtreeIntoContainer so that context properly updates when linked to state. (@gaearon in #7125)value-less submit and reset inputs removing the browser-default text. (@zpao in #7197)name attribute being added to inputs when not provided. (@okonet in #7199)Add error codes to production invariants, with links to the view the full error text. (@keyanzhang in #6948)
React.PropTypes.symbol to support ES2015 Symbols as props. (@puradox in #6377)onLoad handling to <link> element. (@roderickhsiao in #6815)onError handling to <source> element. (@wadahiro in #6941)value and defaultValue more accurately in the DOM. (@jimfb in #6406)Object.prototype. (@Weizenlol in #6886)is="null" ended up in the DOM in Firefox. (@darobin in #6896)dangerouslySetInnerHTML and SVG in Internet Explorer. (@joshhunt in #6982)<textarea> placeholders. (@jimfb in #7002)<input type="radio"/>. (@jimfb in #7003)<select> components behave the same on initial render as they do on updates. (@yiminghe in #5362)isRunning() API. (@nfcampos in #6763)null node. (@keyanzhang in #6958)Nothing published for this version
Nothing published for this version
Ensure we're using the latest object-assign, which has protection against a non-spec-compliant native Object.assign. (@zpao in #6681)
object-assign, which has protection against a non-spec-compliant native Object.assign. (@zpao in #6681)props objects passed to createElement must be plain objects. (@richardscarrott in #6134)onScroll event handler with server rendering. (@Aweary in #6678)<object> nodes from being able to read <param> nodes in IE. (@syranide in #6691)merge utility. (@sebmarkbage in #6634)Nothing published for this version
Nothing published for this version
Nothing published for this version
Removed extraneous files from npm package. (@gaearon in #6388)
componentWillUnmount is only called once. (@jimfb in #6613)<option>s are correctly selected when inside <optgroup>. (@trevorsmith in #6442)<body> elements are caught when warning for invalid markup. (@keyanzhang in #6469)scryRenderedDOMComponentsWithClass better. (@ipeters90 in #6529)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Restore React.__spread API to unbreak code compiled with some tools making use of this undocumented API. It is now officially deprecated. (@zpao in #6…
These deprecations were introduced nine months ago in v0.14 with a warning and are removed:
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. (@spicyj 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. (@spicyj in #5205)<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)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. ()@spicyj in #5451)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)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)<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)These deprecations were introduced nine months ago in v0.14 with a warning and are removed:
React top-level export: findDOMNode, render, renderToString, renderToStaticMarkup, and unmountComponentAtNode. As a reminder, they are now available on ReactDOM and ReactDOMServer. (@jimfb in #5832)batchedUpdates and cloneWithProps. (@jimfb in #5859, @zpao in #6016)setProps, replaceProps, and getDOMNode. (@jimfb in #5570)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)children to void elements like <input> was deprecated, and now throws an error. (@jonhester in #3372)refs (e.g. this.refs.div.props) were deprecated, and are removed now. (@jimfb in #5495)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)<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)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)ref and key from the props. (@prometheansacrifice in #5744)props object to super() in the constructor. (@prometheansacrifice in #5346)setState() inside getChildContext(). (@raineroviir in #6121)onclick which should be onClick. (@ali in #5361)NaN values in style. (@jontewks in #5811)value and defaultValue for an input. (@mgmcdermott in #5823)onFocusIn or onFocusOut handlers as they are unnecessary in React. (@jontewks in #6296)ReactDOM.render(), this.setState(), or this.forceUpdate(). (@conorhastings in #5193 and @gaearon in #6310)TestUtils.Simulate() now prints a helpful message if you attempt to use it with shallow rendering. (@conorhastings in #5358)arrayOf() and objectOf() provide better error messages for invalid arguments. (@chicoxyzzy in #5390)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)cite and profile HTML attributes. (@AprilArcus in #6094 and @saiichihashimoto in #6032)cssFloat, gridRow and gridColumn CSS properties. (@stevenvachon in #6133 and @mnordick in #4779)borderImageOutset, borderImageWidth, borderImageSlice, floodOpacity, strokeDasharray, and strokeMiterlimit as unitless CSS properties. (@rofrischmann in #6210 and #6270)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)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)children to strings for Web Components. (@jimfb in #5093)<use> events. (@edmellum in #5720)<select> is unmounted while its onChange handler is executing. (@sambev in #6028)ref. (@yiminghe in #6095)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)### Other improvements
loose-envify instead of envify so it installs less transitive dependencies. (@qerub in #6303)getMountedInstance(). (@glenjamin in #4918)render(). (@simonewebdesign in #5411)Object.create and Object.freeze in older environments. It still, however, requires ES5 shims in those environments. (@dgreensp in #4959)data- attributes with names that start with numbers. (@nLight in #5216)suppressContentEditableWarning prop for components like Draft.js that intentionally manage contentEditable children with React. (@mxstbr in #6112)createClass() on complex specs. (@spicyj in #5550)Nothing published for this version
Nothing published for this version
Nothing published for this version
Backport support for the new JSX transform to 0.14.x. (@lunaruan in #18299 and @gaearon in #20024)
Nothing published for this version
Fixed memory leak when rendering on the server
Fixed bug with tags when using dangerouslySetInnerHTML
<option> tags when using dangerouslySetInnerHTMLsetState in componentWillMount when using shallow renderingUpdated fbjs dependency to pick up change affecting handling of undefined document.
fbjs dependency to pick up change affecting handling of undefined document.More minor internal changes for better compatibility with React Native
Minor internal changes for better compatibility with React Native
autoCapitalize and autoCorrect props are now set as attributes in the DOM instead of properties to improve cross-browser compatibility<select> elements not handling updates properly.printDOM()Added support for nonce attribute for and elements
nonce attribute for <script> and <style> elementsreversed attribute for <ol> elementsreact-dom-server.js to expose renderToString and renderToStaticMarkup for usage in the browserFixed bug with development build preventing events from firing in some versions of Internet Explorer & Edge
integrity attributechildren prop being coerced to a string for custom elements, which was not the desired behaviorreact from dependencies to peerDependencies to match expectations and align with react-addons-* packagesFixed bug where events wouldn't fire in old browsers when using React in development mode
dangerouslySetInnerHTML with Closure Compiler Advanced modesrcLang, default, and kind attributes for <track> elementscolor attribute.props access on DOM nodes is updated on re-rendersscryRenderedDOMComponentsWithClass so it works with SVG0 to be used as a timeout valuereact-dom.js to main to improve compatibility with toolingSee http://facebook.github.io/react/blog/2015/10/07/react-v0.14.html.
See http://facebook.github.io/react/blog/2015/10/07/react-v0.14.html.
react package into two: react and react-dom. This paves the way to writing components that can be shared between the web version of React and React Native. This means you will need to include both files and some functions have been moved from React to ReactDOM.react-addons-clone-with-props, react-addons-create-fragment, react-addons-css-transition-group, react-addons-linked-state-mixin, react-addons-perf, react-addons-pure-render-mixin, react-addons-shallow-compare, react-addons-test-utils, react-addons-transition-group, react-addons-update, ReactDOM.unstable_batchedUpdates).props) which returns a JSX element, and this function may be used as a component.getDOMNode() to get the underlying DOM node. Starting with this release, a ref to a DOM component is the actual DOM node. Note that refs to custom (user-defined) components work exactly as before; only the built-in DOM components are affected by this change.React.initializeTouchEvents is no longer necessary and has been removed completely. Touch events now work automatically.TestUtils.findAllInRenderedTree and related helpers are no longer able to take a DOM component, only a custom component.props object is now frozen, so mutating props after creating a component element is no longer supported. In most cases, React.cloneElement should be used instead. This change makes your components easier to reason about and enables the compiler optimizations mentioned above.createFragment helper to migrate, which now returns an array.classSet has been removed. Use classnames instead.class instead of className.this.getDOMNode() is now deprecated and ReactDOM.findDOMNode(this) can be used instead. Note that in the common case, findDOMNode is now unnecessary since a ref to the DOM component is now the actual DOM node.setProps and replaceProps are now deprecated. Instead, call ReactDOM.render again at the top level with the new props.React.Component in order to enable stateless function components. The ES3 module pattern will continue to work.style object between renders has been deprecated. This mirrors our change to freeze the props object.cloneWithProps is now deprecated. Use React.cloneElement instead (unlike cloneWithProps, cloneElement does not merge className or style automatically; you can merge them manually if needed).CSSTransitionGroup will no longer listen to transition events. Instead, you should specify transition durations manually using props such as transitionEnterTimeout={500}.React.Children.toArray which takes a nested children object and returns a flat array with keys assigned to each child. This helper makes it easier to manipulate collections of children in your render methods, especially if you want to reorder or slice this.props.children before passing it down. In addition, React.Children.map now returns plain arrays too.console.error instead of console.warn for warnings so that browsers show a full stack trace in the console. (Our warnings appear when you use patterns that will break in future releases and for code that is likely to behave unexpectedly, so we do consider our warnings to be “must-fix” errors.)Symbol in browsers that support it, in order to ensure that React never considers untrusted JSON to be a valid element. If this extra security protection is important to you, you should add a Symbol polyfill for older browsers, such as the one included by Babel’s polyfill.capture, challenge, inputMode, is, keyParams, keyType, minLength, summary, wrap. It also now supports these non-standard attributes: autoSave, results, security.xlinkActuate, xlinkArcrole, xlinkHref, xlinkRole, xlinkShow, xlinkTitle, xlinkType, xmlBase, xmlLang, xmlSpace.image SVG tag is now supported by React DOM.is="..." attribute).audio and video tags: onAbort, onCanPlay, onCanPlayThrough, onDurationChange, onEmptied, onEncrypted, onEnded, onError, onLoadedData, onLoadedMetadata, onLoadStart, onPause, onPlay, onPlaying, onProgress, onRateChange, onSeeked, onSeeking, onStalled, onSuspend, onTimeUpdate, onVolumeChange, onWaiting.shallowCompare add-on has been added as a migration path for PureRenderMixin in ES6 classes.CSSTransitionGroup can now use custom class names instead of appending -enter-active or similar to the transition name.document.body directly as the container to ReactDOM.render now gives a warning as doing so can cause problems with browser extensions that modify the DOM.<option> elements with multiple text children properly and renders <select> elements on the server with the correct option selected.React.createElement('DIV')) no longer causes problems, though we continue to recommend lowercase for consistency with the JSX tag name convention (lowercase names refer to built-in components, capitalized names refer to custom components).animationIterationCount, boxOrdinalGroup, flexOrder, tabSize, stopOpacity.Simulate.mouseEnter and Simulate.mouseLeave now work.react-tools package and JSXTransformer.js browser file have been deprecated. You can continue using version 0.13.3 of both, but we no longer support them and recommend migrating to Babel, which has built-in support for React and JSX.optimisation.react.inlineElements transform converts JSX elements to object literals like {type: 'div', props: ...} instead of calls to React.createElement. This should only be enabled in production, since it disables some development warnings/checks.optimisation.react.constantElements transform hoists element creation to the top level for subtrees that are fully static, which reduces calls to React.createElement and the resulting allocations. More importantly, it tells React that the subtree hasn’t changed so React can completely skip it when reconciling. This should only be enabled in production, since it disables some development warnings/checks.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →