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
Nothing published for this version
Nothing published for this version
One column per quarter.
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
Remove an unused dependency to address the `SharedArrayBuffer` cross-origin isolation warning. (@koba04 and @bvaughn in #20831, #20832, and #20840)
SharedArrayBuffer cross-origin isolation warning. (@koba04 and @bvaughn in #20831, #20832, and #20840)Fix a crash in IE11. (@gaearon in #20071)
Deprecate the undocumented and misleading ReactTestUtils.SimulateNative API. (@gaearon in #13407)
Today, we are releasing React 17!
Learn more about React 17 and how to update to it on the official React blog.
react/jsx-runtime and react/jsx-dev-runtime for the new JSX transform. (@lunaruan in #18299)displayName on context for improved stacks. (@eps1lon in #18224)'use strict' from leaking in the UMD bundles. (@koba04 in #19614)fb.me for redirects. (@cylim in #19598)document. (@trueadm in #18195 and others)useEffect cleanup functions asynchronously. (@bvaughn in #17925)focusin and focusout for onFocus and onBlur. (@trueadm in #19186)Capture events use the browser capture phase. (@trueadm in #19221)onScroll event. (@gaearon in #19464)forwardRef or memo component returns undefined. (@gaearon in #19550)console in the second render pass of DEV mode double render. (@sebmarkbage in #18547)ReactTestUtils.SimulateNative API. (@gaearon in #13407)ReactDOM.flushSync during lifecycle methods (but warn). (@sebmarkbage in #18759)code property to the keyboard event objects. (@bl00mber in #18287)disableRemotePlayback property for video elements. (@tombrowndev in #18619)enterKeyHint property for input elements. (@eps1lon in #18634)value is provided to <Context.Provider>. (@charlie1404 in #19054)memo or forwardRef components return undefined. (@bvaughn in #19550)onTouchStart, onTouchMove, and onWheel passive. (@gaearon in #19654)setState hanging in development inside a closed iframe. (@gaearon in #19220)defaultProps. (@jddxf in #18539)dangerouslySetInnerHTML is undefined. (@eps1lon in #18676)require implementation. (@just-boris in #18632)onBeforeInput reporting an incorrect event.type. (@eps1lon in #19561)event.relatedTarget reported as undefined in Firefox. (@claytercek in #19607)movementX/Y polyfill with capture events. (@gaearon in #19672)onSubmit and onReset events. (@gaearon in #19333)useCallback behavior consistent with useMemo for the server renderer. (@alexmckenley in #18783)findByType error message. (@henryqdineen in #17439)unstable_ prefix before the experimental APIs. (@acdlite in #18825)unstable_discreteUpdates and unstable_flushDiscreteUpdates. (@trueadm in #18825)timeoutMs argument. (@acdlite in #19703)<div hidden /> prerendering in favor of a different future API. (@acdlite in #18917)unstable_expectedLoadTime to Suspense for CPU-bound trees. (@acdlite in #19936)unstable_useOpaqueIdentifier Hook. (@lunaruan in #17322)unstable_startTransition API. (@rickhanlonii in #19696)act in the test renderer no longer flushes Suspense fallbacks. (@acdlite in #18596)useMutableSource that may happen when getSnapshot changes. (@bvaughn in #18297)useMutableSource. (@bvaughn in #18912)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add support for the new JSX transform. (@lunaruan in #18299)
Fix bug in legacy mode Suspense where effect clean-up functions are not fired. This only affects users who use Suspense for data fetching in legacy mo
componentWillReceiveProps, shouldComponentUpdate, and so on). (@gaearon in #18330)Deprecate React.createFactory() (@trueadm in #17878)
React.createFactory() (@trueadm in #17878)style may cause an unexpected collision (@sophiebits in #14181, #18002)unstable_createPortal (@trueadm in #17880)onMouseEnter being fired on disabled buttons (@AlfredoGJ in #17675)shouldComponentUpdate twice when developing in StrictMode (@bvaughn in #17942)version property to ReactDOM (@ealush in #15780)toString() of dangerouslySetInnerHTML (@sebmarkbage in #17773)ReactDOM.createRoot() (@trueadm in #17937)ReactDOM.createRoot() callback params and added warnings on usage (@bvaughn in #17916)SuspenseList CPU bound heuristic (@sebmarkbage in #17455)isPending only being true when transitioning from inside an input event (@acdlite in #17382)React.memo components dropping updates when interrupted by a higher priority update (@acdlite in #18091)Fix passive effects (useEffect) not being fired in a multi-root app. (@acdlite in #17347)
• react: https://unpkg.com/react@16.12.0/umd/ • react-art: https://unpkg.com/react-art@16.12.0/umd/ • react-dom: https://unpkg.com/react-dom@16.12.0/umd/ • react-is: https://unpkg.com/react-is@16.12.0/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.12.0/umd/ • scheduler: https://unpkg.com/scheduler@0.18.0/umd/
Fix mouseenter handlers from firing twice inside nested React containers. @yuanoook in #16928
mouseenter handlers from firing twice inside nested React containers. @yuanoook in #16928unstable_createRoot and unstable_createSyncRoot experimental APIs. (These are available in the Experimental channel as createRoot and createSyncRoot.) (@acdlite in #17088)• react: https://unpkg.com/react@16.11.0/umd/ • react-art: https://unpkg.com/react-art@16.11.0/umd/ • react-dom: https://unpkg.com/react-dom@16.11.0/umd/ • react-is: https://unpkg.com/react-is@16.11.0/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.11.0/umd/ • scheduler: https://unpkg.com/scheduler@0.17.0/umd/
Fix regression in react-native-web by restoring order of arguments in event plugin extractors (@necolas in #16978)
• react: https://unpkg.com/react@16.10.2/umd/ • react-art: https://unpkg.com/react-art@16.10.2/umd/ • react-dom: https://unpkg.com/react-dom@16.10.2/umd/ • react-is: https://unpkg.com/react-is@16.10.2/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.10.2/umd/ • scheduler: https://unpkg.com/scheduler@0.16.2/umd/
Fix regression in Next.js apps by allowing Suspense mismatch during hydration to silently proceed (@sebmarkbage in #16943)
Fix edge case where a hook update wasn't being memoized. (@sebmarkbage in #16359)
Object.is instead of inline polyfill, when available. (@ku8ar in #16212)postMessage loop with short intervals instead of attempting to align to frame boundaries with requestAnimationFrame. (@acdlite in #16214)• react: https://unpkg.com/react@16.10.0/umd/ • react-art: https://unpkg.com/react-art@16.10.0/umd/ • react-dom: https://unpkg.com/react-dom@16.10.0/umd/ • react-is: https://unpkg.com/react-is@16.10.0/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.10.0/umd/ • scheduler: https://unpkg.com/scheduler@0.16.0/umd/
Deprecate old names for the UNSAFE_* lifecycle methods. (@bvaughn in #15186 and @threepointone in #16103)
<React.Profiler> API for gathering performance measurements programmatically. (@bvaughn in #15172)unstable_ConcurrentMode in favor of unstable_createRoot. (@acdlite in #15532)UNSAFE_* lifecycle methods. (@bvaughn in #15186 and @threepointone in #16103)javascript: URLs as a common attack surface. (@sebmarkbage in #15047)disablePictureInPicture attribute on <video>. (@eek in #15334)onLoad event for <embed>. (@cherniavskii in #15614)useState state from DevTools. (@bvaughn in #14906)setState is called from useEffect, creating a loop. (@gaearon in #15180)findDOMNode for components wrapped in <Suspense>. (@acdlite in #15312)!important style. (@acdlite in #15861 and #15882)act(async () => ...) for testing asynchronous state updates. (@threepointone in #14853)act from different renderers. (@threepointone in #16039 and #16042)act() call. (@threepointone in #15763 and #16041)act from the wrong renderer. (@threepointone in #15756)• react: https://unpkg.com/react@16.9.0/umd/ • react-art: https://unpkg.com/react-art@16.9.0/umd/ • react-dom: https://unpkg.com/react-dom@16.9.0/umd/ • react-is: https://unpkg.com/react-is@16.9.0/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.9.0/umd/ • scheduler: https://unpkg.com/scheduler@0.15.0/umd/
This is a release candidate for React v16.9.0.
This is a release candidate for React v16.9.0.
Changelog is available in https://github.com/facebook/react/pull/16254.
• react: https://unpkg.com/react@16.9.0-rc.0/umd/ • react-art: https://unpkg.com/react-art@16.9.0-rc.0/umd/ • react-dom: https://unpkg.com/react-dom@16.9.0-rc.0/umd/ • react-is: https://unpkg.com/react-is@16.9.0-rc.0/umd/ • react-test-renderer: https://unpkg.com/react-test-renderer@16.9.0-rc.0/umd/ • scheduler: https://unpkg.com/scheduler@0.15.0-rc.0/umd/
(await act(async () => ...) (@threepointone in #14853)
await act(async () => ...) (@threepointone in #14853)Fix an incorrect bailout in useReducer(). (@acdlite in #15124)
useReducer(). (@acdlite in #15124)contextType is set to Context.Consumer instead of Context. (@aweary in #14831)contextType is set to invalid values. (@gaearon in #15142)Don't set the first option as selected in select tag with size attribute. (@kulek1 in #14242)
size attribute. (@kulek1 in #14242)useEffect(async () => ...) warning message. (@gaearon in #15118)setState in shallow renderer to work with Hooks. (@gaearon in #15120)React.memo. (@aweary in #14816)forwardRef. (@eps1lon in #15100)Fix a bug where DevTools caused a runtime error when inspecting a component that used a useContext hook. (@bvaughn in #14940)
Fix a bug that caused inputs to behave incorrectly in UMD builds. (@gaearon in #14914)
Fix ReactDOM.render being ignored inside useEffect. (@gaearon in #14799)
ReactDOM.render being ignored inside useEffect. (@gaearon in #14799)useImperativeHandle to work correctly when no deps are specified. (@gaearon in #14801)crossOrigin attribute to work in SVG image elements. (@aweary in #14832)act() warning. (@threepointone in #14855)Fix a crash when used together with an older version of React. (@bvaughn in #14770)
Add Hooks — a way to use state and other React features without writing a class. (@acdlite et al. in #13968)
useReducer Hook lazy initialization API. (@acdlite in #14723)useState and useReducer Hooks. (@acdlite in #14569)Object.is algorithm for comparing useState and useReducer values. (@Jessidhia in #14752)useEffect/useMemo/useCallback Hooks. (@acdlite in #14594)React.lazy(). (@gaearon in #14626)undefined or a function. All other values, including null, are not allowed. @acdlite in #14119shouldComponentUpdate in the presence of getDerivedStateFromProps for Shallow Renderer. (@chenesan in #14613)ReactTestRenderer.act() and ReactTestUtils.act() for batching updates so that tests more closely match real behavior. (@threepointone in #14744)Nothing published for this version
Nothing published for this version
Fix performance of React.lazy for large numbers of lazily-loaded components. (@acdlite in #14429)
React.lazy for large numbers of lazily-loaded components. (@acdlite in #14429)react-dom/server@16.6 and react@<16.6. (@gaearon in #14291)setTimeout in testing environments. (@bvaughn in #14358)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix bugs in Suspense and lazy. (@acdlite in #14133, #14157, and #14164)
Suspense and lazy. (@acdlite in #14133, #14157, and #14164)React.memo updates in React DevTools. (@bvaughn in #14141)renderToNodeStream() calls. (@sebmarkbage in #14182)This release was published in a broken state and should be skipped.
This release was published in a broken state and should be skipped.
Fallback should not remount every time a promise resolves. (@acdlite in #14083)
Add React.memo() as an alternative to PureComponent for functions. (@acdlite in #13748)
React.memo() as an alternative to PureComponent for functions. (@acdlite in #13748)React.lazy() for code splitting components. (@acdlite in #13885)React.StrictMode now warns about legacy context API. (@bvaughn in #13760)React.StrictMode now warns about findDOMNode. (@sebmarkbage in #13841)unstable_AsyncMode to unstable_ConcurrentMode. (@trueadm in #13732)unstable_Placeholder to Suspense, and delayMs to maxDuration. (@gaearon in #13799 and @sebmarkbage in #13922)contextType as a more ergonomic way to subscribe to context from a class. (@bvaughn in #13728)getDerivedStateFromError lifecycle method for catching errors in a future asynchronous server-side renderer. (@bvaughn in #13746)<Context> is used instead of <Context.Consumer>. (@trueadm in #13829)window.event in development. (@sergei-startsev in #13697)React.memo(). (@alexmckenley in #13855)contextType. (@alexmckenley and @sebmarkbage in #13889)scheduler. (@gaearon in #13683)requestAnimationFrame earlier. (@acdlite in #13785)envify transform to the package. (@mridgway in #13766)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed a recent regression (@JSteunou in #13650)
<iframe> regression (@JSteunou in #13650)updateWrapper so that <textarea>s no longer re-render when data is unchanged (@joelbarbosa in #13643)Improve the warning when React.forwardRef receives an unexpected number of arguments. (@andresroberto in #13636)
React.forwardRef receives an unexpected number of arguments. (@andresroberto in #13636)isReactComponent. (@gaearon in #13608)react-dom/profiling with schedule/tracking. (@bvaughn in #13605)ForwardRef component defines a displayName, use it in warnings. (@probablyup in #13615)Deprecate a Jest-specific ReactTestUtils.mockComponent() helper (@bvaughn in #13193)
React.forwardRef render function doesn't take exactly two arguments (@bvaughn in #13168)createElement by mistake (@DCtheTall in #13131)onRender until after mutations (@bvaughn in #13572)react-dom/profiling entry point alias for profiling in production (@bvaughn in #13570)onAuxClick event for browsers that support it (@jquense in #11571)movementX and movementY fields to mouse events (@jasonwilliams in #9018)tangentialPressure and twist fields to pointer events (@motiz88 in #13374)focusable SVG attribute (@gaearon in #13339)<noscript> on the client when when hydrating (@Ephem in #13537)gridArea to be treated as a unitless CSS property (@mgol in #13550)compositionend event when typing Korean on IE11 (@crux153 in #12563)children in the <option> tag (@Slowyn in #13261, @gaearon in #13465)checked attribute not getting initially set on the input (@dilidili in #13114)dangerouslySetInnerHTML when __html is not a string (@gaearon in #13353)onChange to fire on falsy values too (@nicolevy in #12628)submit and reset buttons getting an empty label (@ellsclytn in #12780)onSelect event not being triggered after drag and drop (@gaearon in #13422)onClick event not working inside a portal on iOS (@aweary in #11927)onChange to not fire in some cases (@gaearon in #13423)"false" or "true" is the value of a boolean DOM prop (@motiz88 in #13372)this.state is initialized to props (@veekas in #11658)style on hydration in IE due to noisy false positives (@mgol in #13534)StrictMode in the component stack (@gaearon in #13240)window.event in IE (@ConradIrwin in #11696)folder/index.js naming convention (@gaearon in #12059)getDerivedStateFromProps without initialized state (@flxwu in #13317)<webview> tag without warnings (@philipp-spiess in #13301)e.preventDefault() was called (@gaearon in #13384)unstable_deferredUpdates in favor of unstable_scheduleWork from schedule (@gaearon in #13488)dangerouslySetInnerHtml in a selected <option> (@mridgway in #13078)setTimeout is missing (@dustinsoftware in #13088)this in a functional component for shallow renderer to be undefined (@koba04 in #13144)ReactTestUtils.mockComponent() helper (@bvaughn in #13193)ReactDOM.createPortal usage within the test renderer (@bvaughn in #12895)Fix a potential XSS vulnerability when the attacker controls an attribute name (CVE-2018-6341). This fix is available in the latest react-dom@16.4.2,…
Fix a potential XSS vulnerability when the attacker controls an attribute name (CVE-2018-6341). This fix is available in the latest react-dom@16.4.2, as well as in previous affected minor versions: react-dom@16.0.1, react-dom@16.1.2, react-dom@16.2.1, and react-dom@16.3.3. (@gaearon in #13302)
Fix a crash in the server renderer when an attribute is called hasOwnProperty. This fix is only available in react-dom@16.4.2. (@gaearon in #13303)
You can now assign propTypes to components returned by React.ForwardRef. (@bvaughn in #12911)
type changes from some other types to text. (@spirosikmd in #12135)event.target value for the onChange event in IE9. (@nhunzaker in #12976)<React.Fragment /> from a component. (@philipp-spiess in #12966)Add a new experimental React.unstable_Profiler component for measuring performance. (@bvaughn in #12745)
React.unstable_Profiler component for measuring performance. (@bvaughn in #12745)getDerivedStateFromProps() regardless of the reason for re-rendering. (@acdlite in #12600 and #12802)forwardRef() on a deeper setState(). (@gaearon in #12690)propTypes on a context provider component. (@nicolevy in #12658)react-lifecycles-compat in <StrictMode>. (@bvaughn in #12644)forwardRef() render function has propTypes or defaultProps. (@bvaughn in #12644)forwardRef() and context consumers are displayed in the component stack. (@sophiebits in #12777)getDerivedStateFromProps() support to match the new React DOM behavior. (@koba04 in #12676)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)setState() updaters that return null or undefined. (@koba04 in #12756)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix a potential XSS vulnerability when the attacker controls an attribute name (CVE-2018-6341). This fix is available in the latest react-dom@16.4.2,…
CVE-2018-6341). This fix is available in the latest react-dom@16.4.2, as well as in previous affected minor versions: react-dom@16.0.1, react-dom@16.1.2, react-dom@16.2.1, and react-dom@16.3.3. (@gaearon in #13302)Your coding agent can read these notes before it upgrades. Set up the MCP server →