{"componentChunkName":"component---src-templates-blog-js","path":"/blog/2017/09/26/react-v16.0.html","result":{"data":{"markdownRemark":{"html":"<p>Estamos felizes em anunciar o lançamento do React v16.0! Entre as mudanças estão algumas solicitações antigas de recursos, incluindo <a href=\"#new-render-return-types-fragments-and-strings\"><strong>fragmentos</strong></a>, <a href=\"#better-error-handling\"><strong>error boundaries</strong></a>, <a href=\"#portals\"><strong>portais</strong></a>, suporte para <a href=\"#support-for-custom-dom-attributes\"><strong>atributos DOM customizados</strong></a>, aprimoramento na <a href=\"#better-server-side-rendering\"><strong>renderização de servidor</strong></a> e <a href=\"#reduced-file-size\"><strong>tamanho de arquivo reduzido</strong></a>.</p>\n<h3 id=\"new-render-return-types-fragments-and-strings\"><a href=\"#new-render-return-types-fragments-and-strings\" 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>Novos tipos de retorno na renderização: fragmentos e strings </h3>\n<p>Agora você pode retornar um array de elementos no método <code class=\"gatsby-code-text\">render</code> de um componente. Assim como outros arrays, você precisará adicionar uma prop key para cada elemento para evitar um warning:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Não é mais necessário envolver os itens da lista em um elemento extra!</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token comment\">// Não esqueça das keys :)</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>A<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">First item</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">,</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>B<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Second item</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">,</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>C<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Third item</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><a href=\"/blog/2017/11/28/react-v16.2.0-fragment-support.html\">A partir do React 16.2.0</a>, foi adicionado ao JSX suporte a uma sintaxe especial de fragmento que não exige keys.</p>\n<p>Adicionamos suporte para retornar strings também:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</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 string\">'Look ma, no spans!'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><a href=\"/docs/react-component.html#render\">Veja a lista completa de tipos de retornos</a>.</p>\n<h3 id=\"better-error-handling\"><a href=\"#better-error-handling\" 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>Gerenciamento de erros aprimorado </h3>\n<p>Anteriormente, erros de tempo de execução durante a renderização podiam colocar o React em um estado quebrado, produzindo mensagens de erro enigmáticas e exigindo uma atualização da página para recuperar. Para resolver esse problema, o React 16 usa uma estratégia de tratamento de erros mais resiliente. Por padrão, se um erro for lançado dentro dos métodos de renderização ou ciclo de vida de um componente, toda a árvore de componentes será desmontada da raiz. Isso impede a exibição de dados corrompidos. No entanto, provavelmente não é a experiência ideal para o usuário.</p>\n<p>Ao invés de desmontar a aplicação inteira toda vez que houver um erro, você pode usar error boundaries. <em>Error Boundaries</em> são componentes especiais que capturam erros dentro de sua subárvore e exibem uma UI de fallback em seu lugar. Pense que <em>Error Boundaries</em> são como instruções try-catch, mas para componentes React.</p>\n<p>Para mais detalhes, veja nossa <a href=\"/blog/2017/07/26/error-handling-in-react-16.html\">publicação anterior sobre gerenciamento de erros no React 16</a>.</p>\n<h3 id=\"portals\"><a href=\"#portals\" 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>Portais </h3>\n<p>Portais fornecem uma maneira de primeira classe para renderizar componentes filhos em um nó do DOM que existe fora da hierarquia DOM do componente pai.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// React *não* criará uma nova div. Irá renderizar os filhos dentro de `domNode`.</span>\n  <span class=\"token comment\">// `domNode` é qualquer nó DOM válido, independentemente de sua localização no DOM.</span>\n  <span class=\"token keyword\">return</span> ReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">createPortal</span><span class=\"token punctuation\">(</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">,</span>\n    domNode<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Veja um exemplo completo na <a href=\"/docs/portals.html\">documentação para portais</a>.</p>\n<h3 id=\"better-server-side-rendering\"><a href=\"#better-server-side-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>Renderização de servidor aprimorada </h3>\n<p>Foi incluída no React 16 uma reescrita completa na renderização de servidor. É muito rápida. Suporta <strong>streaming</strong>, para que você possa enviar bytes para o cliente mais rapidamente. E graças a uma <a href=\"#reduced-file-size\">nova estratégia de empacotamento</a>, que compila as verificações  do <code class=\"gatsby-code-text\">process.env</code> (acredite ou não, ler <code class=\"gatsby-code-text\">process.env</code> no Node é muito lento!), você não precisa mais empacotar o React para ter boa performance em renderização de servidor.</p>\n<p>Sasha Aickin, membro do <em>Core Team</em> escreveu um <a href=\"https://medium.com/@aickin/whats-new-with-server-side-rendering-in-react-16-9b0d78585d67\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ótimo artigo descrevendo as melhorias de SSR no React 16</a>. De acordo com os benchmarks feitos por Sasha, renderização de servidor no React 16 é aproximadamente <strong>três vezes mais rápido</strong> que no React 15. “Quando comparado ao React 15 com <code class=\"gatsby-code-text\">process.env</code> compilado, há um ganho de 2.4x no Node 4, em torno de 3x de ganho de desempenho no Node 6, e uma completa melhoria de 3.8x no recém lançado Node 8.4. E se você comparar com o React 15 sem compilação, o React 16 tem um ganho de uma ordem de magnitude completa em SSR na versão mais recente do Node!” (Como destaca Sasha, lembre-se de que esses números são baseados em parâmetros de referência sintéticos e podem não refletir o desempenho do mundo real.)</p>\n<p>Além disso, o React 16 é melhor para hidratar o HTML renderizado pelo servidor, assim que é entregue ao cliente. Não é mais necessário que a renderização inicial corresponda exatamente ao resultado do servidor. Em vez disso, tentará reutilizar o máximo possível do DOM existente. Chega de checksums! Em geral, não recomendamos que você processe conteúdo diferente no cliente e no servidor, mas ele pode ser útil em alguns casos (por exemplo, registros de data e hora). <strong>No entanto, é perigoso ter nós ausentes na renderização do servidor, pois isso pode causar a criação de nós irmãos com atributos incorretos.</strong></p>\n<p>Veja a <a href=\"/docs/react-dom-server.html\">documentação do <code class=\"gatsby-code-text\">ReactDOMServer</code></a> para mais detalhes.</p>\n<h3 id=\"support-for-custom-dom-attributes\"><a href=\"#support-for-custom-dom-attributes\" 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>Suporte para atributos DOM customizados </h3>\n<p>Ao invés de ignorar atributos HTML e SVG não reconhecidos, o React agora <a href=\"/blog/2017/09/08/dom-attributes-in-react-16.html\">os passará para o DOM</a>. Isso nos traz o benefício adicional de nos livrar da maioria da lista de permissões de atributos do React, resultando em tamanhos de arquivo reduzidos.</p>\n<h3 id=\"reduced-file-size\"><a href=\"#reduced-file-size\" 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>Tamanho de arquivo reduzido </h3>\n<p>Apesar de todas essas adições, o React 16 é realmente <strong>menor</strong> em comparação com 15.6.1!</p>\n<ul>\n<li><code class=\"gatsby-code-text\">react</code> agora é 5.3 kb (2.2 kb com gzip), antes era 20.7 kb (6.9 kb com gzip).</li>\n<li><code class=\"gatsby-code-text\">react-dom</code> agora é 103.7 kb (32.6 kb com gzip), antes era 141 kb (42.9 kb com gzip).</li>\n<li><code class=\"gatsby-code-text\">react</code> + <code class=\"gatsby-code-text\">react-dom</code> agora são 109 kb (34.8 kb com gzip), antes eram 161.7 kb (49.8 kb com gzip).</li>\n</ul>\n<p>Isso equivale a uma redução do tamanho de <strong>32% combinados em comparação com a versão anterior (30% após o gzip)</strong>.</p>\n<p>A diferença de tamanho é parcialmente atribuída a uma alteração no empacotamento. O React agora usa o <a href=\"https://rollupjs.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Rollup</a> para criar <em>flat bundles</em> para cada um de seus diferentes formatos de destino, resultando em ganhos tanto de tamanho como tempo de execução. O formato de <em>flat bundle</em> também significa que o impacto do React no tamanho do pacote é praticamente consistente, independentemente de como você disponibiliza seu aplicativo, seja com Webpack, Browserify, pacotes configuráveis UMD pré-criados ou qualquer outro sistema.</p>\n<h3 id=\"mit-licensed\"><a href=\"#mit-licensed\" 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>Licença MIT </h3>\n<p><a href=\"https://code.facebook.com/posts/300798627056246/relicensing-react-jest-flow-and-immutable-js/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Caso você tenha perdido</a>, React 16 está disponível sob a licença MIT. Nós também publicamos o React 15.6.2 sob a licença MIT, para aqueles que não podem atualizar imediatamente.</p>\n<h3 id=\"new-core-architecture\"><a href=\"#new-core-architecture\" 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>Nova arquitetura principal </h3>\n<p>O React 16 é a primeira versão do React construída sobre uma nova arquitetura principal, codinome “Fiber”. Você pode ler tudo sobre esse projeto no <a href=\"https://code.facebook.com/posts/1716776591680069/react-16-a-look-inside-an-api-compatible-rewrite-of-our-frontend-ui-library/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">blog de engenharia do Facebook</a>. (Spoiler: reescrevemos React!)</p>\n<p>Fiber é responsável pela maior parte das novas funcionalidades no React 16, como error boundaries e fragmentos. Nos próximos lançamentos, vocês podem esperar por novas funcionalidades quando começarmos a desbloquear todo o potencial do React.</p>\n<p>Talvez a área mais empolgante na qual estamos trabalhando seja a <strong>renderização assíncrona</strong>- uma estratégia para agendar cooperativamente o trabalho de renderização, liberando periodicamente a execução do navegador. O resultado é que, com a renderização assíncrona, os aplicativos serão mais responsivos porque o React evitará o bloqueio da <em>main thread</em>.</p>\n<p>Esta demonstração fornece uma prévia dos tipos de problemas que a renderização assíncrona pode resolver:</p>\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Ever wonder what &quot;async rendering&quot; means? Here&#39;s a demo of how to coordinate an async React tree with non-React work <a href=\"https://t.co/3snoahB3uV\">https://t.co/3snoahB3uV</a> <a href=\"https://t.co/egQ988gBjR\">pic.twitter.com/egQ988gBjR</a></p>&mdash; Andrew Clark (@acdlite) <a href=\"https://twitter.com/acdlite/status/909926793536094209\">September 18, 2017</a></blockquote>\n<p><em>Dica: Preste atenção no quadrado preto girando.</em></p>\n<p>Acreditamos que a renderização assíncrona é importante e representa o futuro do React. Para tornar a migração para a v16.0 o mais suave possível, ainda não estamos habilitando nenhum recurso assíncrono, mas estamos animados em começar a liberá-los nos próximos meses. Fique ligado!</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<p>React v16.0.0 está disponível no registro do 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.0.0 react-dom@^16.0.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.0.0 react-dom@^16.0.0</code></pre></div>\n<p>Nós também fornecemos compilações UMD do 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=\"upgrading\"><a href=\"#upgrading\" 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>Atualização </h2>\n<p>Embora o React 16 inclua mudanças internas significativas, em termos de atualização, você pode pensar nisso como qualquer outro grande lançamento do React. Estamos servindo o React 16 aos usuários do Facebook e do Messenger.com desde o início deste ano, e lançamos várias versões beta e candidata à produção para eliminar problemas adicionais. Com pequenas exceções, <strong>se sua aplicação rodar na versão 15.6 sem nenhum aviso, ele deverá funcionar na versão 16.</strong></p>\n<p>Para as depreciações listadas abaixo na seção <a href=\"#packaging\">empacotamento</a>, codemods estão disponíveis para automaticamente atualizar seu código.\nConsulte a publicação <a href=\"/blog/2017/04/07/react-v15.5.0.html\">15.5.0</a> no blog para mais informações, ou pesquise por codemods no projeto <a href=\"https://github.com/reactjs/react-codemod\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react-codemod</a>.</p>\n<h3 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 </h3>\n<p>A hidratação de um contêiner renderizado pelo servidor agora possui uma API explícita. Se você está recebendo HTML renderizado no servidor, use <a href=\"/docs/react-dom.html#hydrate\"><code class=\"gatsby-code-text\">ReactDOM.hydrate</code></a> no lugar de <code class=\"gatsby-code-text\">ReactDOM.render</code>. Continue usando <code class=\"gatsby-code-text\">ReactDOM.render</code> apenas se você estiver fazendo renderização no cliente.</p>\n<h3 id=\"react-addons\"><a href=\"#react-addons\" 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 Addons </h3>\n<p>Como foi previamente anunciado, estamos <a href=\"/blog/2017/04/07/react-v15.5.0.html#discontinuing-support-for-react-addons\">descontinuando o suporte para React Addons</a>. Esperamos que a versão mais recente de cada addon (exceto <code class=\"gatsby-code-text\">react-addons-perf</code>; veja abaixo) funcione no futuro próximo, mas não publicaremos atualizações adicionais.</p>\n<p>Consulte o anúncio anterior para obter <a href=\"/blog/2017/04/07/react-v15.5.0.html#discontinuing-support-for-react-addons\">sugestões de como migrar</a>.</p>\n<p><code class=\"gatsby-code-text\">react-addons-perf</code> não mais funcionará no React 16. É provável o lançamento de uma nova versão desta ferramenta no futuro. Enquanto isso, você pode <a href=\"/docs/optimizing-performance.html#profiling-components-with-the-chrome-performance-tab\">usar a ferramenta de análise de performance do seu navegador para perfilar os componentes React</a>.</p>\n<h3 id=\"breaking-changes\"><a href=\"#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>Quebras de compatibilidade </h3>\n<p>React 16 inclui várias pequenas quebras de compatibilidade. Elas afetam apenas casos de uso incomuns e não esperamos que eles quebrem a maioria das aplicações.</p>\n<ul>\n<li>React 15 tinha suporte limitado e não documentado para error boundaries usando o <code class=\"gatsby-code-text\">unstable_handleError</code>. Este método foi renomeado para <code class=\"gatsby-code-text\">componentDidCatch</code>. Você pode usar um codemod para <a href=\"https://github.com/reactjs/react-codemod#error-boundaries\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">migrar automaticamente para a nova API</a>.</li>\n<li><code class=\"gatsby-code-text\">ReactDOM.render</code> e <code class=\"gatsby-code-text\">ReactDOM.unstable_renderSubtreeIntoContainer</code> agora retornam <code class=\"gatsby-code-text\">null</code> se forem chamados dentro de um método do ciclo de vida. Para evitar isso, você pode usar <a href=\"https://github.com/facebook/react/issues/10309#issuecomment-318433235\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">portais</a> ou <a href=\"https://github.com/facebook/react/issues/10309#issuecomment-318434635\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">refs</a>.</li>\n<li>\n<p><code class=\"gatsby-code-text\">setState</code>:</p>\n<ul>\n<li>Chamar <code class=\"gatsby-code-text\">setState</code> com <code class=\"gatsby-code-text\">null</code> não mais disparará uma atualização. Isto permite a você decidir em uma função de atualização se deseja re-renderizar.</li>\n<li>Chamar <code class=\"gatsby-code-text\">setState</code> diretamente no render sempre causará uma atualização. Este não era o comportamento anterior. Independentemente, você não deve chamar o <code class=\"gatsby-code-text\">setState</code> no render.</li>\n<li>Função de retorno do <code class=\"gatsby-code-text\">setState</code> (segundo argumento) agora é disparada imediatamente após o <code class=\"gatsby-code-text\">componentDidMount</code> / <code class=\"gatsby-code-text\">componentDidUpdate</code> em vez de depois que todos os componentes tenham renderizado.</li>\n</ul>\n</li>\n<li>Quando substituir <code class=\"gatsby-code-text\">&lt;A /&gt;</code> por <code class=\"gatsby-code-text\">&lt;B /&gt;</code>, <code class=\"gatsby-code-text\">B.componentWillMount</code> agora será chamado sempre antes de <code class=\"gatsby-code-text\">A.componentWillUnmount</code>. Anteriormente, <code class=\"gatsby-code-text\">A.componentWillUnmount</code> poderia ser chamado antes em alguns casos.</li>\n<li>Anteriormente, alterar a ref para um componente sempre desanexaria a ref antes que a renderização desse componente fosse chamada. Agora, alteramos a ref mais tarde, ao aplicar as alterações no DOM.</li>\n<li>Não é seguro re-renderizar em um contêiner que foi modificado por algo diferente do React. Isso funcionou anteriormente em alguns casos, mas nunca foi suportado. Agora emitimos um aviso neste caso. Em vez disso, você deve limpar sua árvore de componentes usando <code class=\"gatsby-code-text\">ReactDOM.unmountComponentAtNode</code>. <a href=\"https://github.com/facebook/react/issues/10294#issuecomment-318820987\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Veja este exemplo.</a></li>\n<li>O ciclo de vida <code class=\"gatsby-code-text\">componentDidUpdate</code> não recebe mais o parâmetro <code class=\"gatsby-code-text\">prevContext</code>. (Veja <a href=\"https://github.com/facebook/react/issues/8631\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#8631</a>)</li>\n<li>Shallow renderer não chama mais o <code class=\"gatsby-code-text\">componentDidUpdate</code> porque DOM refs não estão mais disponíveis. Isso também o torna consistente com o <code class=\"gatsby-code-text\">componentDidMount</code> (que também não é chamado nas versões anteriores).</li>\n<li>Shallow renderer não implementa mais <code class=\"gatsby-code-text\">unstable_batchedUpdates</code>.</li>\n<li><code class=\"gatsby-code-text\">ReactDOM.unstable_batchedUpdates</code> agora recebe apenas um argumento extra após o retorno de chamada.</li>\n</ul>\n<h3 id=\"packaging\"><a href=\"#packaging\" 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>Empacotamento </h3>\n<ul>\n<li>Não há mais <code class=\"gatsby-code-text\">react/lib/*</code> e <code class=\"gatsby-code-text\">react-dom/lib/*</code>. Mesmo em ambientes CommonJS, React e ReactDOM são pré-compilados para arquivos únicos (“flat bundles”). Se você usou alguma funcionalidade interna do React não documentada, e elas não funcionam mais, nos informe sobre seu caso específico em uma nova <em>issue</em>, que tentaremos descobrir uma estratégia de migração para você.</li>\n<li>Não existe mais a versão <code class=\"gatsby-code-text\">react-with-addons.js</code>. Todos os addons compatíveis serão publicados separadamente no npm, e terão versão de navegador de arquivo único caso necessite.</li>\n<li>As depreciações introduzidas na versão 15.x foram removidas do pacote principal. <code class=\"gatsby-code-text\">React.createClass</code> está disponível como <code class=\"gatsby-code-text\">create-react-class</code>, <code class=\"gatsby-code-text\">React.PropTypes</code> como <code class=\"gatsby-code-text\">prop-types</code>, <code class=\"gatsby-code-text\">React.DOM</code> como <code class=\"gatsby-code-text\">react-dom-factories</code>, <code class=\"gatsby-code-text\">react-addons-test-utils</code> como <code class=\"gatsby-code-text\">react-dom/test-utils</code>, e shallow renderer como <code class=\"gatsby-code-text\">react-test-renderer/shallow</code>. Consulte as publicações <a href=\"/blog/2017/04/07/react-v15.5.0.html\">15.5.0</a> e <a href=\"/blog/2017/06/13/react-v15.6.0.html\">15.6.0</a> no blog para obter instruções de migração de código e codemods.</li>\n<li>\n<p>Os nomes e caminhos para as compilações de navegador de arquivo único foram alterados para enfatizar a diferença entre as compilações de desenvolvimento e produção. Por exemplo:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">react/dist/react.js</code> → <code class=\"gatsby-code-text\">react/umd/react.development.js</code></li>\n<li><code class=\"gatsby-code-text\">react/dist/react.min.js</code> → <code class=\"gatsby-code-text\">react/umd/react.production.min.js</code></li>\n<li><code class=\"gatsby-code-text\">react-dom/dist/react-dom.js</code> → <code class=\"gatsby-code-text\">react-dom/umd/react-dom.development.js</code></li>\n<li><code class=\"gatsby-code-text\">react-dom/dist/react-dom.min</code>.js → <code class=\"gatsby-code-text\">react-dom/umd/react-dom.production.min.js</code></li>\n</ul>\n</li>\n</ul>\n<h2 id=\"javascript-environment-requirements\"><a href=\"#javascript-environment-requirements\" 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>Requisitos do ambiente JavaScript </h2>\n<p>React 16 depende dos tipos de coleção <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Map</a> e <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Set</a>. Se você suporta navegadores e dispositivos mais antigos que ainda não os fornecem nativamente (por exemplo, IE &#x3C;11), considere incluir um polyfill global na compilação de sua aplicação, como <a href=\"https://github.com/zloirock/core-js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">core-js</a> ou <a href=\"https://babeljs.io/docs/usage/polyfill/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">babel-polyfill</a>.</p>\n<p>Um ambiente para o React 16 usando polyfill do core-js para oferecer suporte a navegadores mais antigos deve se parecer com:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">'core-js/es6/map'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token string\">'core-js/es6/set'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> ReactDOM <span class=\"token keyword\">from</span> <span class=\"token string\">'react-dom'</span><span class=\"token punctuation\">;</span>\n\nReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, world!</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">,</span>\n  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>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>React também depende de <code class=\"gatsby-code-text\">requestAnimationFrame</code> (mesmo em ambientes de teste).<br>\nVocê pode usar o pacote <a href=\"https://www.npmjs.com/package/raf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">raf</a> para injetar <code class=\"gatsby-code-text\">requestAnimationFrame</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">'raf/polyfill'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"acknowledgments\"><a href=\"#acknowledgments\" 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>Agradecimentos </h2>\n<p>Como sempre, este lançamento não seria possível sem nossos contribuidores de código aberto. Agradecemos a todos que reportaram problemas, abriram <em>PRs</em>, responderam às <em>issues</em>, escreveram documentação e muito mais!</p>\n<p>Agradecimentos especiais para os nossos contribuidores oficiais, especialmente por seus esforços heróicos nas últimas semanas durante o ciclo de pré-lançamento: <a href=\"https://twitter.com/aweary\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Brandon Dail</a>, <a href=\"https://twitter.com/monasticpanic\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Jason Quense</a>, <a href=\"https://twitter.com/natehunzaker\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Nathan Hunzaker</a> e <a href=\"https://twitter.com/xander76\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Sasha Aickin</a>.</p>","excerpt":"Estamos felizes em anunciar o lançamento do React v16.0! Entre as mudanças estão algumas solicitações antigas de recursos, incluindo fragmentos, error boundaries, portais, suporte para atributos DOM customizados, aprimoramento na renderização de servidor e tamanho de arquivo reduzido. Novos tipos de retorno na renderização: fragmentos e strings  Agora você pode retornar um array de elementos no método  de um componente. Assim como outros arrays, você precisará adicionar uma prop key para cada…","frontmatter":{"title":"React v16.0","next":null,"prev":null,"author":[{"frontmatter":{"name":"Andrew Clark","url":"https://twitter.com/acdlite"}}]},"fields":{"date":"26 de setembro de 2017","path":"content/blog/2017-09-26-react-v16.0.md","slug":"/blog/2017/09/26/react-v16.0.html"}},"allMarkdownRemark":{"edges":[{"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"}}},{"node":{"frontmatter":{"title":"React v16.8: O React com Hooks"},"fields":{"slug":"/blog/2019/02/06/react-v16.8.0.html"}}}]}},"pageContext":{"slug":"/blog/2017/09/26/react-v16.0.html"}},"staticQueryHashes":[]}