{"componentChunkName":"component---src-templates-blog-js","path":"/blog/2020/10/20/react-v17.html","result":{"data":{"markdownRemark":{"html":"<p>Today, we are releasing React 17! We’ve written at length about the role of the React 17 release and the changes it contains in <a href=\"/blog/2020/08/10/react-v17-rc.html\">the React 17 RC blog post</a>. This post is a brief summary of it, so if you’ve already read the RC post, you can skip this one.</p>\n<h2 id=\"no-new-features\"><a href=\"#no-new-features\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>No New Features </h2>\n<p>The React 17 release is unusual because it doesn’t add any new developer-facing features. Instead, this release is primarily focused on <strong>making it easier to upgrade React itself</strong>.</p>\n<p>In particular, React 17 is a “stepping stone” release that makes it safer to embed a tree managed by one version of React inside a tree managed by a different version of React.</p>\n<p>It also makes it easier to embed React into apps built with other technologies.</p>\n<h2 id=\"gradual-upgrades\"><a href=\"#gradual-upgrades\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Gradual Upgrades </h2>\n<p><strong>React 17 enables gradual React upgrades.</strong> When you upgrade from React 15 to 16 (or, this time, from React 16 to 17), you would usually upgrade your whole app at once. This works well for many apps. But it can get increasingly challenging if the codebase was written more than a few years ago and isn’t actively maintained. And while it’s possible to use two versions of React on the page, until React 17 this has been fragile and caused problems with events.</p>\n<p>We’re fixing many of those problems with React 17. This means that <strong>when React 18 and the next future versions come out, you will now have more options</strong>. The first option will be to upgrade your whole app at once, like you might have done before. But you will also have an option to upgrade your app piece by piece. For example, you might decide to migrate most of your app to React 18, but keep some lazy-loaded dialog or a subroute on React 17.</p>\n<p>This doesn’t mean you <em>have to</em> do gradual upgrades. <strong>For most apps, upgrading all at once is still the best solution.</strong> Loading two versions of React — even if one of them is loaded lazily on demand — is still not ideal. However, for larger apps that aren’t actively maintained, this option makes sense to consider, and React 17 lets those apps not get left behind.</p>\n<p>We’ve prepared an <a href=\"https://github.com/reactjs/react-gradual-upgrade-demo/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">example repository</a> demonstrating how to lazy-load an older version of React if necessary. This demo uses Create React App, but it should be possible to follow a similar approach with any other tool. We welcome demos using other tooling as pull requests.</p>\n<blockquote>\n<p>Note</p>\n<p>We’ve <strong>postponed other changes</strong> until after React 17. The goal of this release is to enable gradual upgrades. If upgrading to React 17 were too difficult, it would defeat its purpose.</p>\n</blockquote>\n<h2 id=\"changes-to-event-delegation\"><a href=\"#changes-to-event-delegation\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Changes to Event Delegation </h2>\n<p>To enable gradual updates, we’ve needed to make some changes to the React event system. React 17 is a major release because these changes are potentially breaking. You can check out our <a href=\"/docs/faq-versioning.html#breaking-changes\">versioning FAQ</a> to learn more about our commitment to stability.</p>\n<p>In React 17, React will no longer attach event handlers at the <code class=\"gatsby-code-text\">document</code> level under the hood. Instead, it will attach them to the root DOM container into which your React tree is rendered:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">const</span> rootNode <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'root'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">,</span> rootNode<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>In React 16 and earlier, React would do <code class=\"gatsby-code-text\">document.addEventListener()</code> for most events. React 17 will call <code class=\"gatsby-code-text\">rootNode.addEventListener()</code> under the hood instead.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/bb4b10114882a50090b8ff61b3c4d0fd/31868/react_17_delegation.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 840px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 77.14285714285715%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAACcUlEQVQ4y21T2W4TMRTNr0MfgDeEkPgSJF55JarUJSVpm07WaZLZV+/24XomE9LFypEd3zPnrh59nHFcED5MGT7fc/wIBL7OOT7ds+7O21/D878/CXwjfHnov7042kYhs/DYEnbcIpYOB+HwLIGQO7IZDJyBFxIvEh6u+2Z7Zh/htBz9bL8bAbO7AjTDu8u5427fmEaWjN7MtUHBOPKiRB7O0Nz/gkjm0G3a2TseHbS1KIVCUTfI8vxkGzByHbFHXdfYRwni9RSu3MAqBpWvYXhxDKyPjHOO/X7fwS9LTgbbaDhYY8AYQ11VOGQVZJPAippQwTQxZWdOaXnBgjJJkhjyRSVcX0NDHhqpwLQFbxtsSobn7ABIEpQNDMvgjOzSY1KjVQYNE1jscgTMYRm14Kp3OBqUGV0cuMFkFeJxl6AsI5iWhLSkPe0E/VLGIhUGQVrh5zjA9abCrpBYxexlynErcbmOMNnnmEQ15k8TsOrQRdWlfOT56O52KS43CcaLGL9nzyi4QFQqKO3Hhog+2CCr8TcXeGgtVlWLeTBBRBFLxSnl/FSniCncxRVuMoPHFvgTNphFJaLWQJvjHHLjcHsoMU1KzNISD0mKx3CLec5oPAoYrfrGERYFw+W+wXUqcVsajMO6E1xXCi3Vt4vQ0683ByypGUsq8oK6F9QK61ZDklcMo0W8ZdHiZht3L+kqFpjlCstGo1Q971TDgkss8wZPWYGAhNf07ErtXowEjg8gLGpMM4G7RGDF+mdoXs+hV2dEjqiDibRoTT/5/im6swj9f9/pRPRCFTk98/t/bM7uSAhvInuP589aU1mk7ODP/wCR7n8+8QwuZQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"A diagram showing how React 17 attaches events to the roots rather than to the document\"\n        title=\"\"\n        src=\"/static/bb4b10114882a50090b8ff61b3c4d0fd/1e088/react_17_delegation.png\"\n        srcset=\"/static/bb4b10114882a50090b8ff61b3c4d0fd/65ed1/react_17_delegation.png 210w,\n/static/bb4b10114882a50090b8ff61b3c4d0fd/d10fb/react_17_delegation.png 420w,\n/static/bb4b10114882a50090b8ff61b3c4d0fd/1e088/react_17_delegation.png 840w,\n/static/bb4b10114882a50090b8ff61b3c4d0fd/78612/react_17_delegation.png 1260w,\n/static/bb4b10114882a50090b8ff61b3c4d0fd/21cdd/react_17_delegation.png 1680w,\n/static/bb4b10114882a50090b8ff61b3c4d0fd/31868/react_17_delegation.png 3496w\"\n        sizes=\"(max-width: 840px) 100vw, 840px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<p>We’ve confirmed that <a href=\"https://github.com/facebook/react/issues/7094\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">numerous</a> <a href=\"https://github.com/facebook/react/issues/8693\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">problems</a> <a href=\"https://github.com/facebook/react/issues/12518\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reported</a> <a href=\"https://github.com/facebook/react/issues/13451\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">over</a> <a href=\"https://github.com/facebook/react/issues/4335\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">the</a> <a href=\"https://github.com/facebook/react/issues/1691\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">years</a> <a href=\"https://github.com/facebook/react/issues/285#issuecomment-253502585\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">on</a> <a href=\"https://github.com/facebook/react/pull/8117\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">our</a> <a href=\"https://github.com/facebook/react/issues/11530\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">issue</a> <a href=\"https://github.com/facebook/react/issues/7128\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tracker</a> related to integrating React with non-React code have been fixed by the new behavior.</p>\n<p>If you run into issues with this change, <a href=\"/blog/2020/08/10/react-v17-rc.html#fixing-potential-issues\">here’s a common way to resolve them</a>.</p>\n<h2 id=\"other-breaking-changes\"><a href=\"#other-breaking-changes\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Other Breaking Changes </h2>\n<p><a href=\"/blog/2020/08/10/react-v17-rc.html#other-breaking-changes\">The React 17 RC blog post</a> describes the rest of the breaking changes in React 17.</p>\n<p>We’ve only had to change fewer than twenty components out of 100,000+ in the Facebook product code to work with these changes, so <strong>we expect that most apps can upgrade to React 17 without too much trouble</strong>. Please <a href=\"https://github.com/facebook/react/issues\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tell us</a> if you run into problems.</p>\n<h2 id=\"new-jsx-transform\"><a href=\"#new-jsx-transform\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>New JSX Transform </h2>\n<p>React 17 supports the <a href=\"/blog/2020/09/22/introducing-the-new-jsx-transform.html\">new JSX transform</a>. We’ve also backported support for it to React 16.14.0, React 15.7.0, and 0.14.10. Note that it is completely opt-in, and you don’t have to use it. The classic JSX transform will keep working, and there are no plans to stop supporting it.</p>\n<h2 id=\"react-native\"><a href=\"#react-native\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React Native </h2>\n<p>React Native has a separate release schedule. We currently expect the support for React 17 to land in React Native 0.65, but the exact version is subject to change. As always, you can track the release discussions on the React Native Community releases <a href=\"https://github.com/react-native-community/releases\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">issue tracker</a>.</p>\n<h2 id=\"installation\"><a href=\"#installation\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Installation </h2>\n<p>To install React 17 with npm, run:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> react@17.0.0 react-dom@17.0.0</code></pre></div>\n<p>To install React 17 with Yarn, run:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> react@17.0.0 react-dom@17.0.0</code></pre></div>\n<p>We also provide UMD builds of React via a CDN:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"gatsby-code-html\"><code class=\"gatsby-code-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">crossorigin</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react@17.0.0/umd/react.production.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">crossorigin</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/react-dom@17.0.0/umd/react-dom.production.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Refer to the documentation for <a href=\"/docs/installation.html\">detailed installation instructions</a>.</p>\n<h2 id=\"changelog\"><a href=\"#changelog\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Changelog </h2>\n<h3 id=\"react\"><a href=\"#react\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React </h3>\n<ul>\n<li>Add <code class=\"gatsby-code-text\">react/jsx-runtime</code> and <code class=\"gatsby-code-text\">react/jsx-dev-runtime</code> for the <a href=\"https://babeljs.io/blog/2020/03/16/7.9.0#a-new-jsx-transform-11154-https-githubcom-babel-babel-pull-11154\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">new JSX transform</a>. (<a href=\"https://github.com/lunaruan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lunaruan</a> in <a href=\"https://github.com/facebook/react/pull/18299\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18299</a>)</li>\n<li>Build component stacks from native error frames. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18561\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18561</a>)</li>\n<li>Allow to specify <code class=\"gatsby-code-text\">displayName</code> on context for improved stacks. (<a href=\"https://github.com/eps1lon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eps1lon</a> in <a href=\"https://github.com/facebook/react/pull/18224\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18224</a>)</li>\n<li>Prevent <code class=\"gatsby-code-text\">&#39;use strict&#39;</code> from leaking in the UMD bundles. (<a href=\"https://github.com/koba04\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@koba04</a> in <a href=\"https://github.com/facebook/react/pull/19614\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19614</a>)</li>\n<li>Stop using <code class=\"gatsby-code-text\">fb.me</code> for redirects. (<a href=\"https://github.com/cylim\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@cylim</a> in <a href=\"https://github.com/facebook/react/pull/19598\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19598</a>)</li>\n</ul>\n<h3 id=\"react-dom\"><a href=\"#react-dom\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React DOM </h3>\n<ul>\n<li>Delegate events to roots instead of <code class=\"gatsby-code-text\">document</code>. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/18195\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18195</a> and <a href=\"https://github.com/facebook/react/pulls?q=is%3Apr+author%3Atrueadm+modern+event+is%3Amerged\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">others</a>)</li>\n<li>Clean up all effects before running any next effects. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/17947\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#17947</a>)</li>\n<li>Run <code class=\"gatsby-code-text\">useEffect</code> cleanup functions asynchronously. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/17925\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#17925</a>)</li>\n<li>Use browser <code class=\"gatsby-code-text\">focusin</code> and <code class=\"gatsby-code-text\">focusout</code> for <code class=\"gatsby-code-text\">onFocus</code> and <code class=\"gatsby-code-text\">onBlur</code>. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/19186\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19186</a>)</li>\n<li>Make all <code class=\"gatsby-code-text\">Capture</code> events use the browser capture phase. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/19221\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19221</a>)</li>\n<li>Don’t emulate bubbling of the <code class=\"gatsby-code-text\">onScroll</code> event. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19464\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19464</a>)</li>\n<li>Throw if <code class=\"gatsby-code-text\">forwardRef</code> or <code class=\"gatsby-code-text\">memo</code> component returns <code class=\"gatsby-code-text\">undefined</code>. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19550\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19550</a>)</li>\n<li>Remove event pooling. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/18969\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18969</a>)</li>\n<li>Stop exposing internals that won’t be needed by React Native Web. (<a href=\"https://github.com/necolas\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@necolas</a> in <a href=\"https://github.com/facebook/react/pull/18483\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18483</a>)</li>\n<li>Attach all known event listeners when the root mounts. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19659\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19659</a>)</li>\n<li>Disable <code class=\"gatsby-code-text\">console</code> in the second render pass of DEV mode double render. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18547\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18547</a>)</li>\n<li>Deprecate the undocumented and misleading <code class=\"gatsby-code-text\">ReactTestUtils.SimulateNative</code> API. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/13407\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#13407</a>)</li>\n<li>Rename private field names used in the internals. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/18377\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18377</a>)</li>\n<li>Don’t call User Timing API in development. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/18417\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18417</a>)</li>\n<li>Disable console during the repeated render in Strict Mode. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18547\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18547</a>)</li>\n<li>In Strict Mode, double-render components without Hooks too. (<a href=\"https://github.com/eps1lon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eps1lon</a> in <a href=\"https://github.com/facebook/react/pull/18430\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18430</a>)</li>\n<li>Allow calling <code class=\"gatsby-code-text\">ReactDOM.flushSync</code> during lifecycle methods (but warn). (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18759\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18759</a>)</li>\n<li>Add the <code class=\"gatsby-code-text\">code</code> property to the keyboard event objects. (<a href=\"https://github.com/bl00mber\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bl00mber</a> in <a href=\"https://github.com/facebook/react/pull/18287\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18287</a>)</li>\n<li>Add the <code class=\"gatsby-code-text\">disableRemotePlayback</code> property for <code class=\"gatsby-code-text\">video</code> elements. (<a href=\"https://github.com/tombrowndev\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tombrowndev</a> in <a href=\"https://github.com/facebook/react/pull/18619\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18619</a>)</li>\n<li>Add the <code class=\"gatsby-code-text\">enterKeyHint</code> property for <code class=\"gatsby-code-text\">input</code> elements. (<a href=\"https://github.com/eps1lon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eps1lon</a> in <a href=\"https://github.com/facebook/react/pull/18634\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18634</a>)</li>\n<li>Warn when no <code class=\"gatsby-code-text\">value</code> is provided to <code class=\"gatsby-code-text\">&lt;Context.Provider&gt;</code>. (<a href=\"https://github.com/charlie1404\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@charlie1404</a> in <a href=\"https://github.com/facebook/react/pull/19054\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19054</a>)</li>\n<li>Warn when <code class=\"gatsby-code-text\">memo</code> or <code class=\"gatsby-code-text\">forwardRef</code> components return <code class=\"gatsby-code-text\">undefined</code>. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/19550\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19550</a>)</li>\n<li>Improve the error message for invalid updates. (<a href=\"https://github.com/JoviDeCroock\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@JoviDeCroock</a> in <a href=\"https://github.com/facebook/react/pull/18316\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18316</a>)</li>\n<li>Exclude forwardRef and memo from stack frames. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18559\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18559</a>)</li>\n<li>Improve the error message when switching between controlled and uncontrolled inputs. (<a href=\"https://github.com/vcarl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vcarl</a> in <a href=\"https://github.com/facebook/react/pull/17070\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#17070</a>)</li>\n<li>Keep <code class=\"gatsby-code-text\">onTouchStart</code>, <code class=\"gatsby-code-text\">onTouchMove</code>, and <code class=\"gatsby-code-text\">onWheel</code> passive. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19654\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19654</a>)</li>\n<li>Fix <code class=\"gatsby-code-text\">setState</code> hanging in development inside a closed iframe. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19220\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19220</a>)</li>\n<li>Fix rendering bailout for lazy components with <code class=\"gatsby-code-text\">defaultProps</code>. (<a href=\"https://github.com/jddxf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jddxf</a> in <a href=\"https://github.com/facebook/react/pull/18539\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18539</a>)</li>\n<li>Fix a false positive warning when <code class=\"gatsby-code-text\">dangerouslySetInnerHTML</code> is <code class=\"gatsby-code-text\">undefined</code>. (<a href=\"https://github.com/eps1lon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eps1lon</a> in <a href=\"https://github.com/facebook/react/pull/18676\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18676</a>)</li>\n<li>Fix Test Utils with non-standard <code class=\"gatsby-code-text\">require</code> implementation. (<a href=\"https://github.com/just-boris\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@just-boris</a> in <a href=\"https://github.com/facebook/react/pull/18632\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18632</a>)</li>\n<li>Fix <code class=\"gatsby-code-text\">onBeforeInput</code> reporting an incorrect <code class=\"gatsby-code-text\">event.type</code>. (<a href=\"https://github.com/eps1lon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eps1lon</a> in <a href=\"https://github.com/facebook/react/pull/19561\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19561</a>)</li>\n<li>Fix <code class=\"gatsby-code-text\">event.relatedTarget</code> reported as <code class=\"gatsby-code-text\">undefined</code> in Firefox. (<a href=\"https://github.com/claytercek\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@claytercek</a> in <a href=\"https://github.com/facebook/react/pull/19607\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19607</a>)</li>\n<li>Fix “unspecified error” in IE11. (<a href=\"https://github.com/hemakshis\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hemakshis</a> in <a href=\"https://github.com/facebook/react/pull/19664\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19664</a>)</li>\n<li>Fix rendering into a shadow root. (<a href=\"https://github.com/Jack-Works\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@Jack-Works</a> in <a href=\"https://github.com/facebook/react/pull/15894\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15894</a>)</li>\n<li>Fix <code class=\"gatsby-code-text\">movementX/Y</code> polyfill with capture events. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19672\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19672</a>)</li>\n<li>Use delegation for <code class=\"gatsby-code-text\">onSubmit</code> and <code class=\"gatsby-code-text\">onReset</code> events. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> in <a href=\"https://github.com/facebook/react/pull/19333\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19333</a>)</li>\n<li>Improve memory usage. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/18970\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18970</a>)</li>\n</ul>\n<h3 id=\"react-dom-server\"><a href=\"#react-dom-server\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React DOM Server </h3>\n<ul>\n<li>Make <code class=\"gatsby-code-text\">useCallback</code> behavior consistent with <code class=\"gatsby-code-text\">useMemo</code> for the server renderer. (<a href=\"https://github.com/alexmckenley\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alexmckenley</a> in <a href=\"https://github.com/facebook/react/pull/18783\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18783</a>)</li>\n<li>Fix state leaking when a function component throws. (<a href=\"https://github.com/pmaccart\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@pmaccart</a> in <a href=\"https://github.com/facebook/react/pull/19212\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19212</a>)</li>\n</ul>\n<h3 id=\"react-test-renderer\"><a href=\"#react-test-renderer\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React Test Renderer </h3>\n<ul>\n<li>Improve <code class=\"gatsby-code-text\">findByType</code> error message. (<a href=\"https://github.com/henryqdineen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@henryqdineen</a> in <a href=\"https://github.com/facebook/react/pull/17439\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#17439</a>)</li>\n</ul>\n<h3 id=\"concurrent-mode-experimental\"><a href=\"#concurrent-mode-experimental\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Concurrent Mode (Experimental) </h3>\n<ul>\n<li>Revamp the priority batching heuristics. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18796\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18796</a>)</li>\n<li>Add the <code class=\"gatsby-code-text\">unstable_</code> prefix before the experimental APIs. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18825\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18825</a>)</li>\n<li>Remove <code class=\"gatsby-code-text\">unstable_discreteUpdates</code> and <code class=\"gatsby-code-text\">unstable_flushDiscreteUpdates</code>. (<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@trueadm</a> in <a href=\"https://github.com/facebook/react/pull/18825\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18825</a>)</li>\n<li>Remove the <code class=\"gatsby-code-text\">timeoutMs</code> argument. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/19703\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19703</a>)</li>\n<li>Disable <code class=\"gatsby-code-text\">&lt;div hidden /&gt;</code> prerendering in favor of a different future API. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18917\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18917</a>)</li>\n<li>Add <code class=\"gatsby-code-text\">unstable_expectedLoadTime</code> to Suspense for CPU-bound trees. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/19936\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19936</a>)</li>\n<li>Add an experimental <code class=\"gatsby-code-text\">unstable_useOpaqueIdentifier</code> Hook. (<a href=\"https://github.com/lunaruan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lunaruan</a> in <a href=\"https://github.com/facebook/react/pull/17322\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#17322</a>)</li>\n<li>Add an experimental <code class=\"gatsby-code-text\">unstable_startTransition</code> API. (<a href=\"https://github.com/rickhanlonii\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rickhanlonii</a> in <a href=\"https://github.com/facebook/react/pull/19696\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19696</a>)</li>\n<li>Using <code class=\"gatsby-code-text\">act</code> in the test renderer no longer flushes Suspense fallbacks. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18596\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18596</a>)</li>\n<li>Use global render timeout for CPU Suspense. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/19643\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#19643</a>)</li>\n<li>Clear the existing root content before mounting. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/18730\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18730</a>)</li>\n<li>Fix a bug with error boundaries. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18265\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18265</a>)</li>\n<li>Fix a bug causing dropped updates in a suspended tree. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18384\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18384</a> and <a href=\"https://github.com/facebook/react/pull/18457\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18457</a>)</li>\n<li>Fix a bug causing dropped render phase updates. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18537\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18537</a>)</li>\n<li>Fix a bug in SuspenseList. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18412\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18412</a>)</li>\n<li>Fix a bug causing Suspense fallback to show too early. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18411\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18411</a>)</li>\n<li>Fix a bug with class components inside SuspenseList. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18448\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18448</a>)</li>\n<li>Fix a bug with inputs that may cause updates to be dropped. (<a href=\"https://github.com/jddxf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jddxf</a> in <a href=\"https://github.com/facebook/react/pull/18515\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18515</a> and <a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18535\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18535</a>)</li>\n<li>Fix a bug causing Suspense fallback to get stuck.  (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> in <a href=\"https://github.com/facebook/react/pull/18663\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18663</a>)</li>\n<li>Don’t cut off the tail of a SuspenseList if hydrating. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18854\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18854</a>)</li>\n<li>Fix a bug in <code class=\"gatsby-code-text\">useMutableSource</code> that may happen when <code class=\"gatsby-code-text\">getSnapshot</code> changes. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/18297\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18297</a>)</li>\n<li>Fix a tearing bug in <code class=\"gatsby-code-text\">useMutableSource</code>. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/18912\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18912</a>)</li>\n<li>Warn if calling setState outside of render but before commit. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> in <a href=\"https://github.com/facebook/react/pull/18838\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#18838</a>)</li>\n</ul>","excerpt":"Today, we are releasing React 17! We’ve written at length about the role of the React 17 release and the changes it contains in the React 17 RC blog post. This post is a brief summary of it, so if you’ve already read the RC post, you can skip this one. No New Features  The React 17 release is unusual because it doesn’t add any new developer-facing features. Instead, this release is primarily focused on making it easier to upgrade React itself. In particular, React 17 is a “stepping stone…","frontmatter":{"title":"React v17.0","next":null,"prev":null,"author":[{"frontmatter":{"name":"Dan Abramov","url":"https://twitter.com/dan_abramov"}},{"frontmatter":{"name":"Rachel Nabors","url":"https://twitter.com/rachelnabors"}}]},"fields":{"date":"October 20, 2020","path":"content/blog/2020-10-20-react-v17.md","slug":"/blog/2020/10/20/react-v17.html"}},"allMarkdownRemark":{"edges":[{"node":{"frontmatter":{"title":"Introducing Zero-Bundle-Size React Server Components"},"fields":{"slug":"/blog/2020/12/21/data-fetching-with-react-server-components.html"}}},{"node":{"frontmatter":{"title":"React v17.0"},"fields":{"slug":"/blog/2020/10/20/react-v17.html"}}},{"node":{"frontmatter":{"title":"Introducing the New JSX Transform"},"fields":{"slug":"/blog/2020/09/22/introducing-the-new-jsx-transform.html"}}},{"node":{"frontmatter":{"title":"React v17.0 Release Candidate: No New Features"},"fields":{"slug":"/blog/2020/08/10/react-v17-rc.html"}}},{"node":{"frontmatter":{"title":"React v16.13.0"},"fields":{"slug":"/blog/2020/02/26/react-v16.13.0.html"}}},{"node":{"frontmatter":{"title":"Building Great User Experiences with Concurrent Mode and Suspense"},"fields":{"slug":"/blog/2019/11/06/building-great-user-experiences-with-concurrent-mode-and-suspense.html"}}},{"node":{"frontmatter":{"title":"Preparing for the Future with React Prereleases"},"fields":{"slug":"/blog/2019/10/22/react-release-channels.html"}}},{"node":{"frontmatter":{"title":"Introducing the New React DevTools"},"fields":{"slug":"/blog/2019/08/15/new-react-devtools.html"}}},{"node":{"frontmatter":{"title":"React v16.9.0 and the Roadmap Update"},"fields":{"slug":"/blog/2019/08/08/react-v16.9.0.html"}}},{"node":{"frontmatter":{"title":"Is React Translated Yet? ¡Sí! Sim! はい！"},"fields":{"slug":"/blog/2019/02/23/is-react-translated-yet.html"}}}]}},"pageContext":{"slug":"/blog/2020/10/20/react-v17.html"}},"staticQueryHashes":[]}