{"componentChunkName":"component---src-templates-blog-js","path":"/blog/2019/08/08/react-v16.9.0.html","result":{"data":{"markdownRemark":{"html":"<p>Hoje estamos lançando o React 16.9. Ele contém vários novos recursos, correções de bugs e novos avisos de depreciação para ajudar a se preparar para uma futura versão principal.</p>\n<h2 id=\"new-deprecations\"><a href=\"#new-deprecations\" 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>Novas Depreciações </h2>\n<h3 id=\"renaming-unsafe-lifecycle-methods\"><a href=\"#renaming-unsafe-lifecycle-methods\" 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>Renomeando Métodos de Ciclo de Vida Inseguros </h3>\n<p><a href=\"/blog/2018/03/27/update-on-async-rendering.html\">Há mais de um ano</a>, anunciamos que os métodos de ciclo de vida inseguros estão sendo renomeados:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">componentWillMount</code> → <code class=\"gatsby-code-text\">UNSAFE_componentWillMount</code></li>\n<li><code class=\"gatsby-code-text\">componentWillReceiveProps</code> → <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps</code></li>\n<li><code class=\"gatsby-code-text\">componentWillUpdate</code> → <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate</code></li>\n</ul>\n<p><strong>O React 16.9 não contém alterações significativas e os nomes antigos continuam funcionando nesta versão.</strong> Mas agora você verá um aviso ao usar qualquer um dos nomes antigos:</p>\n<p><img src=\"https://i.imgur.com/sngxSML.png\" alt=\"Warning: componentWillMount foi renomeado e não é recomendado para uso.\"></p>\n<p>Como o aviso sugere, geralmente há <a href=\"/blog/2018/03/27/update-on-async-rendering.html#migrating-from-legacy-lifecycles\">abordagens melhores</a> para cada um dos métodos inseguros. No entanto, talvez você não tenha tempo para migrar ou testar esses componentes. Nesse caso, recomendamos a execução de um script <a href=\"https://medium.com/@cpojer/effective-javascript-codemods-5a6686bb46fb\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">“codemod”</a> que os renomeia automaticamente:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token builtin class-name\">cd</span> seu_projeto\nnpx react-codemod rename-unsafe-lifecycles</code></pre></div>\n<p><em>(Note que ele diz <code class=\"gatsby-code-text\">npx</code>, não <code class=\"gatsby-code-text\">npm</code>. <code class=\"gatsby-code-text\">npx</code> é um utilitário que vem com  Node 6+ por padrão.)</em></p>\n<p>A execução deste codemod substituirá os nomes antigos como <code class=\"gatsby-code-text\">componentWillMount</code> pelos novos nomes como <code class=\"gatsby-code-text\">UNSAFE_componentWillMount</code>:</p>\n<p><img src=\"https://i.imgur.com/Heyvcyi.gif\" alt=\"Codemod em ação\"></p>\n<p>Os novos nomes como <code class=\"gatsby-code-text\">UNSAFE_componentWillMount</code> <strong>irão continuar a funcionar em ambos React 16.9 e em React 17.x</strong>. No entanto, o novo prefixo <code class=\"gatsby-code-text\">UNSAFE_</code> ajudará os componentes com padrões problemáticos a se destacarem durante os code review e depuração de código. (Se desejar, você pode desestimular ainda mais o uso dele dentro do seu aplicativo com o <a href=\"/docs/strict-mode.html\">Strict Mode</a>.)</p>\n<blockquote>\n<p>Nota</p>\n<p>Saiba mais sobre nossa <a href=\"/docs/faq-versioning.html#commitment-to-stability\">política de versão e compromisso com a estabilidade</a>.</p>\n</blockquote>\n<h3 id=\"deprecating-javascript-urls\"><a href=\"#deprecating-javascript-urls\" 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>Depreciando URLs <code class=\"gatsby-code-text\">javascript:</code> </h3>\n<p>As URLs que começam com <code class=\"gatsby-code-text\">javascript:</code> são uma superfície de ataque perigosa porque é fácil incluir acidentalmente uma saída não-tratada em uma tag <code class=\"gatsby-code-text\">&lt;a href&gt;</code> e criar uma brecha de segurança:</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> userProfile <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  website<span class=\"token operator\">:</span> <span class=\"token string\">\"javascript: alert('you got hacked')\"</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// This will now warn:</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>userProfile<span class=\"token punctuation\">.</span>website<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Profile</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p><strong>Em React 16.9,</strong> esse padrão continua a funcionar, mas registrará um aviso. Se você usar <code class=\"gatsby-code-text\">javascript:</code> na lógica das URLs, tente usar manipuladores de eventos React. (Como último recurso, você pode contornar a proteção <a href=\"/docs/dom-elements.html#dangerouslysetinnerhtml\"><code class=\"gatsby-code-text\">dangerouslySetInnerHTML</code></a>, mas é altamente desencorajado e muitas vezes leva a falhas de segurança.)</p>\n<p><strong>Em uma versão principal futura,</strong> React lançará um erro se encontrar um <code class=\"gatsby-code-text\">javascript:</code> URL.</p>\n<h3 id=\"deprecating-factory-components\"><a href=\"#deprecating-factory-components\" 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>Depreciando Componentes “Factory” </h3>\n<p>Antes de compilar as classes JavaScript com o Babel se tornar popular, o React tinha suporte para um componente “factory” que retorna um objeto com um método <code class=\"gatsby-code-text\">render</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">FactoryComponent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Esse padrão é confuso porque parece muito com um componente de função - mas não é um. (Um componente de função apenas retornaria o <code class=\"gatsby-code-text\">&lt;div /&gt;</code> do exemplo acima.)</p>\n<p>Esse padrão quase nunca foi usado e o suportá-lo faz com que o React seja um pouco maior e mais lento do que o necessário. Então estamos depreciando este padrão na 16.9 e registrando um aviso se ele for encontrado. Se você confiar nele, a adição <code class=\"gatsby-code-text\">FactoryComponent.prototype = React.Component.prototype</code> pode servir como uma solução alternativa. Alternativamente, você pode convertê-lo em uma classe ou em um componente de função.</p>\n<p>Não esperamos que a maioria das bases de código seja afetadas por isso.</p>\n<h2 id=\"new-features\"><a href=\"#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>Novas Funcionalidades </h2>\n<h3 id=\"async-act-for-testing\"><a href=\"#async-act-for-testing\" 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>Utilitário <a href=\"/docs/test-utils.html#act\"><code class=\"gatsby-code-text\">act()</code></a> assíncrono para teste </h3>\n<p><a href=\"/blog/2019/02/06/react-v16.8.0.html\">O React 16.8</a> introduziu um novo utilitário de teste chamado <a href=\"/docs/test-utils.html#act\"><code class=\"gatsby-code-text\">act()</code></a> para ajudá-lo a escrever testes que correspondam melhor ao comportamento do navegador. Por exemplo, várias atualizações de estado em um único <code class=\"gatsby-code-text\">act()</code> são enfileiradas. Isso corresponde ao modo como o React já funciona ao manipular eventos reais do navegador e ajuda a preparar seus componentes para o futuro, no qual o React irá enfileirar atualizações com mais frequência.</p>\n<p>No entanto, em 16.8 <code class=\"gatsby-code-text\">act()</code> apenas suporta funções síncronas. Às vezes, você pode ter visto um aviso como este em um teste, mas <a href=\"https://github.com/facebook/react/issues/14769\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">não conseguiu corrigi-lo facilmente</a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">An update to SomeComponent inside a test was not wrapped in act(...).</code></pre></div>\n<p><strong>No React 16.9, <code class=\"gatsby-code-text\">act()</code> também aceita funções assíncronas,</strong> e você pode chamar o <code class=\"gatsby-code-text\">await</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">await</span> <span class=\"token function\">act</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Isso resolve os casos restantes em que antes você não podia usar o <code class=\"gatsby-code-text\">act()</code>, como quando a atualização do estado estava dentro de uma função assíncrona. Como resultado, <strong>você poderá corrigir todos os avisos do <code class=\"gatsby-code-text\">act()</code> restantes em seus testes agora.</strong> </p>\n<p>Ouvimos que não haviam informações suficientes sobre como escrever testes com <code class=\"gatsby-code-text\">act()</code>. O novo guia <a href=\"/docs/testing-recipes.html\">Receitas de Testes</a> descreve cenários comuns e como <code class=\"gatsby-code-text\">act()</code> pode ajudar você a escrever bons testes. Esses exemplos usam APIs vanilla do DOM, mas você pode também usar o <a href=\"https://testing-library.com/docs/react-testing-library/intro\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Testing Library</a> para reduzir o boilerplate de código. Muitos de seus métodos já usam <code class=\"gatsby-code-text\">act()</code> internamente.</p>\n<p>Por favor, informe-nos <a href=\"https://github.com/facebook/react/issues\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">com uma issue</a> se você se deparar com outros cenários em que <code class=\"gatsby-code-text\">act()</code> não funciona bem para você e tentaremos ajudá-lo.</p>\n<h3 id=\"performance-measurements-with-reactprofiler\"><a href=\"#performance-measurements-with-reactprofiler\" 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>Medições de Desempenho com <a href=\"/docs/profiler.html\"><code class=\"gatsby-code-text\">&lt;React.Profiler&gt;</code></a> </h3>\n<p>Em React 16.5, introduzimos um novo <a href=\"/blog/2018/09/10/introducing-the-react-profiler.html\">React Profiler para o DevTools</a> que ajuda a encontrar gargalos de desempenho em seu aplicativo. <strong>Em React 16.9, também estamos adicionando uma maneira <em>programática</em> de reunir as medições</strong> chamadas <code class=\"gatsby-code-text\">&lt;React.Profiler&gt;</code>. Esperamos que a maioria dos aplicativos menores não os use, mas pode ser útil rastrear as regressões de desempenho ao longo do tempo em aplicativos maiores.</p>\n<p>O <code class=\"gatsby-code-text\">&lt;Profiler&gt;</code> mede com qual frequência uma aplicação React renderiza e qual o “custo” da renderização. Sua finalidade é ajudar identificar partes de um aplicativo que estão lentas e podem se beneficiar da <a href=\"/docs/hooks-faq.html#how-to-memoize-calculations\">otimização, como a memorização</a>.</p>\n<p>Um <code class=\"gatsby-code-text\">&lt;Profiler&gt;</code> pode ser adicionado em qualquer lugar em uma árvore React para medir o custo de renderização dessa parte da árvore.\nEle requer duas props: um <code class=\"gatsby-code-text\">id</code> (string) e um <a href=\"/docs/profiler.html#onrender-callback\"><code class=\"gatsby-code-text\">onRender</code> callback</a> (função) que o React chama toda vez que um componente dentro da árvore “envia” uma atualização.</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>application<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>onRenderCallback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    </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 plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Navigation</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Main</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </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 plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Para saber mais sobre o <code class=\"gatsby-code-text\">Profiler</code> e os parametros passado para o <code class=\"gatsby-code-text\">onRender</code> callback, confira <a href=\"/docs/profiler.html\">a documentação do <code class=\"gatsby-code-text\">Profiler</code></a>.</p>\n<blockquote>\n<p>Nota:</p>\n<p>Profiling adiciona uma sobrecarga extra, portanto, <strong>ela é desativada na <a href=\"https://reactjs.org/docs/optimizing-performance.html#use-the-production-build\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">compilação de produção</a></strong>.</p>\n<p>Para optar pelo profiling em produção, o React fornece uma compilação de produção especial com a criação de profiling ativo.\nLeia mais sobre como usar essa versão em <a href=\"https://fb.me/react-profiling\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">fb.me/react-profiling</a>.</p>\n</blockquote>\n<h2 id=\"notable-bugfixes\"><a href=\"#notable-bugfixes\" 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>Bugfixes Notáveis </h2>\n<p>Esta versão contém algumas outras melhorias notáveis:</p>\n<ul>\n<li>Um problema ao chamar <code class=\"gatsby-code-text\">findDOMNode()</code> dentro de um <code class=\"gatsby-code-text\">&lt;Suspense&gt;</code> <a href=\"https://github.com/facebook/react/pull/15312\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">foi corrigido</a>.</li>\n<li>Um vazamento de memória causado pela retenção de subárvores excluídas <a href=\"https://github.com/facebook/react/pull/16115\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">também foi corrigido</a>.</li>\n<li>Um loop infinito causado por <code class=\"gatsby-code-text\">setState</code> em <code class=\"gatsby-code-text\">useEffect</code> agora <a href=\"https://github.com/facebook/react/pull/15180\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">registra um erro</a>. (Isto é semelhante ao erro que você vê quando você chama <code class=\"gatsby-code-text\">setState</code> em <code class=\"gatsby-code-text\">componentDidUpdate</code> de uma classe.)</li>\n</ul>\n<p>Agradecemos a todos os colaboradores que ajudaram a identificar e corrigir esses e outros problemas. Você pode encontrar o changelog completo <a href=\"#changelog\">abaixo</a>.</p>\n<h2 id=\"an-update-to-the-roadmap\"><a href=\"#an-update-to-the-roadmap\" 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>Uma atualização para o Roadmap </h2>\n<p>Em <a href=\"/blog/2018/11/27/react-16-roadmap.html\">Novembro de 2018</a>, publicamos este roteiro para as versões 16.x:</p>\n<ul>\n<li>Uma versão menor de 16.x com React Hooks (estimativa passada: Q1 2019)</li>\n<li>Uma versão menor de 16.x com o Concurrent Mode (estimativa passada: Q2 2019)</li>\n<li>Uma versão menor de 16.x com Suspense para Data Fetching (estimativa anterior: meados de 2019)</li>\n</ul>\n<p>Essas estimativas eram otimistas demais e precisamos ajustá-las.</p>\n<p><strong>tldr:</strong> Nós lançamos os Hooks a tempo, mas estamos reagrupando o Concurrent Mode e Suspense para Data Fetching em uma única versão que pretendemos lançar ainda este ano.</p>\n<p>Em fevereiro, nós <a href=\"/blog/2019/02/06/react-v16.8.0.html\">lançamos a versão estável 16.8</a> incluindo o React Hooks, com suporte ao React Native <a href=\"https://reactnative.dev/blog/2019/03/12/releasing-react-native-059\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">um mês mais tarde</a>. No entanto, subestimamos o trabalho de acompanhamento desta versão, incluindo as regras de lint, ferramentas de desenvolvimento, exemplos e mais documentação. Isso mudou a linha do tempo em alguns meses.</p>\n<p>Agora que React Hooks foram lançados, o trabalho no Concurrent Mode e Suspense para Data Fetching está em pleno andamento. O <a href=\"https://twitter.com/facebook/status/1123322299418124289\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">novo site do Facebook que está atualmente em desenvolvimento ativo</a> é construído sobre esses recursos. Testá-los com código real ajudou a descobrir e resolver muitos problemas antes que eles pudessem afetar os usuários de código aberto. Algumas dessas correções envolveram uma reformulação interna desses recursos, o que também fez com que a linha do tempo fosse alterada.</p>\n<p>Com esse novo entendimento, aqui está o que planejamos fazer a seguir.</p>\n<h3 id=\"one-release-instead-of-two\"><a href=\"#one-release-instead-of-two\" 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>Um Lançamento em Vez de Dois </h3>\n<p>Concurrent Mode e Suspense <a href=\"https://developers.facebook.com/videos/2019/building-the-new-facebookcom-with-react-graphql-and-relay/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">fortalecem o novo site do Facebook</a> que está em desenvolvimento ativo, por isso estamos confiantes de que estão perto de um estado estável tecnicamente. Agora também entendemos melhor as etapas concretas antes que elas estejam prontas para adoção de código aberto.</p>\n<p>Originalmente, pensamos em dividir o Concurrent Mode e Suspense para Data Fetching em dois lançamentos. Descobrimos que esse sequenciamento é confuso para explicar porque esses recursos são mais relacionados do que pensávamos inicialmente. Portanto, planejamos lançar suporte para o Concurrent Mode e Suspense para Data Fetching em uma única versão.</p>\n<p>Nós não queremos comprometer a data de lançamento novamente. Dado que confiamos em ambos no código de produção, esperamos fornecer uma versão 16.x com suporte opcional para eles este ano.</p>\n<h3 id=\"an-update-on-data-fetching\"><a href=\"#an-update-on-data-fetching\" 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>Uma Atualização na Busca de Dados </h3>\n<p>Embora o React não tenha opinião sobre como você busca dados, a primeira versão do Suspense para Data Fetching provavelmente focará a integração com <em>bibliotecas de busca de dados opinativas</em>. Por exemplo, no Facebook, estamos usando as APIs do Relay que se integram com o Suspense. Vamos documentar como outras bibliotecas opinativas como a Apollo podem suportar uma integração semelhante.</p>\n<p>Na primeira versão, <em>não</em> pretendemos focar na solução ad-hoc “fire an HTTP request” que usamos nas demos anteriores (também conhecidas como “React Cache”). No entanto, esperamos que tanto nós como a comunidade React exploremos esse espaço nos meses após o lançamento inicial.</p>\n<h3 id=\"an-update-on-server-rendering\"><a href=\"#an-update-on-server-rendering\" 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>Uma Atualização na Renderização do Servidor </h3>\n<p>Iniciamos o trabalho no <a href=\"/blog/2018/11/27/react-16-roadmap.html#suspense-for-server-rendering\">novo renderizador de servidor com capacidade para suspense</a>, mas <em>não</em> esperamos que ele esteja pronto para a versão inicial do Concurrent Mode. Essa versão, no entanto, fornecerá uma solução temporária que permitirá que o renderizador do servidor existente emita HTML para fallbacks de Suspense imediatamente e, em seguida, renderize seu conteúdo real no cliente. Esta é a solução que estamos atualmente usando no Facebook até que o renderizador de streaming esteja pronto.</p>\n<h3 id=\"why-is-it-taking-so-long\"><a href=\"#why-is-it-taking-so-long\" 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>Por que Demora Tanto Tempo? </h3>\n<p>Lançamos as peças individuais que levaram ao Concurrent Mode quando elas se tornaram estáveis, incluindo a <a href=\"/blog/2018/03/29/react-v-16-3.html\">nova API de contexto</a>, <a href=\"/blog/2018/10/23/react-v-16-6.html\">carregamento sob demanda com Suspense</a> e <a href=\"/blog/2019/02/06/react-v16.8.0.html\">Hooks</a>. Também estamos ansiosos para liberar as outras partes que faltam, mas <a href=\"/docs/design-principles.html#dogfooding\">testá-las em escala</a> é uma parte importante do processo. A resposta honesta é que isso só levou mais trabalho do que esperávamos quando começamos. Como sempre, agradecemos suas dúvidas e comentários no <a href=\"https://twitter.com/reactjs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Twitter</a> e em nossas <a href=\"https://github.com/facebook/react/issues\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">issues</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>Instalação </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<p>React v16.9.0 está disponível no registro npm.</p>\n<p>Para instalar o React 16 com Yarn, execute:</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@^16.9.0 react-dom@^16.9.0</code></pre></div>\n<p>Para instalar o React 16 com npm, execute:</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> --save react@^16.9.0 react-dom@^16.9.0</code></pre></div>\n<p>Nós também fornecemos compilações UMD de React via 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@16/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@16/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>Consulte a documentação para <a href=\"/docs/installation.html\">instruções detalhadas de instalação</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>Adiciona API do <code class=\"gatsby-code-text\">&lt;React.Profiler&gt;</code> para reunir medições de desempenho programaticamente. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> em <a href=\"https://github.com/facebook/react/pull/15172\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15172</a>)</li>\n<li>Remove <code class=\"gatsby-code-text\">unstable_ConcurrentMode</code> em favor de <code class=\"gatsby-code-text\">unstable_createRoot</code>. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/15532\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15532</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>Deprecia nomes antigos dos métodos do ciclo de vida para os <code class=\"gatsby-code-text\">UNSAFE_*</code>. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> em <a href=\"https://github.com/facebook/react/pull/15186\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15186</a> e <a href=\"https://github.com/threepointone\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@threepointone</a> em <a href=\"https://github.com/facebook/react/pull/16103\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16103</a>)</li>\n<li>Deprecia URLs <code class=\"gatsby-code-text\">javascript:</code> como uma superfície de ataque comum. (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> em <a href=\"https://github.com/facebook/react/pull/15047\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15047</a>)</li>\n<li>Deprecia componentes incomuns do “module pattern” (factory). (<a href=\"https://github.com/sebmarkbage\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sebmarkbage</a> em <a href=\"https://github.com/facebook/react/pull/15145\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15145</a>)</li>\n<li>Adiciona suporte para o atributo <code class=\"gatsby-code-text\">disablePictureInPicture</code> em <code class=\"gatsby-code-text\">&lt;video&gt;</code>. (<a href=\"https://github.com/eek\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eek</a> em <a href=\"https://github.com/facebook/react/pull/15334\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15334</a>)</li>\n<li>Adiciona suporte para o evento <code class=\"gatsby-code-text\">onLoad</code> no <code class=\"gatsby-code-text\">&lt;embed&gt;</code>. (<a href=\"https://github.com/cherniavskii\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@cherniavskii</a> em <a href=\"https://github.com/facebook/react/pull/15614\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15614</a>)</li>\n<li>Adiciona suporte para editar estados criados por <code class=\"gatsby-code-text\">useState</code> no DevTools. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> em <a href=\"https://github.com/facebook/react/pull/14906\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#14906</a>)</li>\n<li>Adiciona suporte para alterar o Suspense no DevTools. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/15232\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15232</a>)</li>\n<li>Avisa quando <code class=\"gatsby-code-text\">setState</code> é chamado no <code class=\"gatsby-code-text\">useEffect</code>, criando um loop. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/15180\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15180</a>)</li>\n<li>Corrige um vazamento de memória. (<a href=\"https://github.com/paulshen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@paulshen</a> em <a href=\"https://github.com/facebook/react/pull/16115\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16115</a>)</li>\n<li>Corrige uma falha dentro do <code class=\"gatsby-code-text\">findDOMNode</code> dos componentes envolvidos por <code class=\"gatsby-code-text\">&lt;Suspense&gt;</code>. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/15312\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15312</a>)</li>\n<li>Corrige efeitos pendentes de ser liberados muito tarde. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/15650\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15650</a>)</li>\n<li>Corrige ordem de argumento incorreta em uma messagem de aviso. (<a href=\"https://github.com/brickspert\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@brickspert</a> em <a href=\"https://github.com/facebook/react/pull/15345\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15345</a>)</li>\n<li>Corrige a ocultação dos nós de fallback do Suspense quando houver um <code class=\"gatsby-code-text\">!important</code> no estilo. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/15861\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15861</a> e <a href=\"https://github.com/facebook/react/pull/15882\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15882</a>)</li>\n<li>Melhora ligeiramente o desempenho de hidratação. (<a href=\"https://github.com/bmeurer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bmeurer</a> em <a href=\"https://github.com/facebook/react/pull/15998\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15998</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>Corrige a saída incorreta para nomes de propriedades CSS customizadas do camelCase. (<a href=\"https://github.com/bedakb\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bedakb</a> em <a href=\"https://github.com/facebook/react/pull/16167\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16167</a>)</li>\n</ul>\n<h3 id=\"react-test-utilities-and-test-renderer\"><a href=\"#react-test-utilities-and-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 Utilities e Test Renderer </h3>\n<ul>\n<li>Adiciona <code class=\"gatsby-code-text\">act(async () =&gt; ...)</code> para testar atualizações de estado assíncronas. (<a href=\"https://github.com/threepointone\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@threepointone</a> em <a href=\"https://github.com/facebook/react/pull/14853\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#14853</a>)</li>\n<li>Adiciona suporte para aninhamento <code class=\"gatsby-code-text\">act</code> de diferentes renderizadores. (<a href=\"https://github.com/threepointone\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@threepointone</a> em <a href=\"https://github.com/facebook/react/pull/16039\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16039</a> e <a href=\"https://github.com/facebook/react/pull/16042\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16042</a>)</li>\n<li>Avisa no Strict Mode se os efeitos estiverem programados fora de uma chamada <code class=\"gatsby-code-text\">act()</code>. (<a href=\"https://github.com/threepointone\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@threepointone</a> em <a href=\"https://github.com/facebook/react/pull/15763\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15763</a> e <a href=\"https://github.com/facebook/react/pull/16041\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#16041</a>)</li>\n<li>Avisa ao usar <code class=\"gatsby-code-text\">act</code> no renderizador errado. (<a href=\"https://github.com/threepointone\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@threepointone</a> em <a href=\"https://github.com/facebook/react/pull/15756\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#15756</a>)</li>\n</ul>","excerpt":"Hoje estamos lançando o React 16.9. Ele contém vários novos recursos, correções de bugs e novos avisos de depreciação para ajudar a se preparar para uma futura versão principal. Novas Depreciações  Renomeando Métodos de Ciclo de Vida Inseguros  Há mais de um ano, anunciamos que os métodos de ciclo de vida inseguros estão sendo renomeados:  →   →   →  O React 16.9 não contém alterações significativas e os nomes antigos continuam funcionando nesta versão. Mas agora você verá um aviso ao usar…","frontmatter":{"title":"React v16.9.0 e a atualização do Roadmap","next":null,"prev":null,"author":[{"frontmatter":{"name":"Dan Abramov","url":"https://twitter.com/dan_abramov"}},{"frontmatter":{"name":"Brian Vaughn","url":"https://github.com/bvaughn"}}]},"fields":{"date":"08 de agosto de 2019","path":"content/blog/2019-08-08-react-v16.9.0.md","slug":"/blog/2019/08/08/react-v16.9.0.html"}},"allMarkdownRemark":{"edges":[{"node":{"frontmatter":{"title":"Apresentando Componentes React de tamanho zero no Servidor"},"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":"Apresentando o novo JSX Transform"},"fields":{"slug":"/blog/2020/09/22/introducing-the-new-jsx-transform.html"}}},{"node":{"frontmatter":{"title":"React v17.0 Candidato à lançamento: Sem novas funcionalidades"},"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":"Construindo Ótimas Experiências de Usuário com Modo Concorrente e Suspense"},"fields":{"slug":"/blog/2019/11/06/building-great-user-experiences-with-concurrent-mode-and-suspense.html"}}},{"node":{"frontmatter":{"title":"Preparando para o Futuro com as Prereleases React"},"fields":{"slug":"/blog/2019/10/22/react-release-channels.html"}}},{"node":{"frontmatter":{"title":"Apresentando o novo React DevTools"},"fields":{"slug":"/blog/2019/08/15/new-react-devtools.html"}}},{"node":{"frontmatter":{"title":"React v16.9.0 e a atualização do Roadmap"},"fields":{"slug":"/blog/2019/08/08/react-v16.9.0.html"}}},{"node":{"frontmatter":{"title":"O React já esta traduzido? ¡Sí! Sim! はい！"},"fields":{"slug":"/blog/2019/02/23/is-react-translated-yet.html"}}}]}},"pageContext":{"slug":"/blog/2019/08/08/react-v16.9.0.html"}},"staticQueryHashes":[]}