{"componentChunkName":"component---src-templates-blog-js","path":"/blog/2018/11/27/react-16-roadmap.html","result":{"data":{"markdownRemark":{"html":"<p>Você pode ter ouvido falar sobre funcionalidades como “Hooks”, “Suspense”, e “Renderização Concorrente” em postagens passadas no blog ou em palestras. Nesta postagem, nós vamos ver como elas se encaixam e a linha do tempo esperada para seus lançamentos em versões estáveis do React.</p>\n<blockquote>\n<p>Uma Atualização de Agosto de 2019</p>\n<p>Você pode encontrar uma atualização de roteiro nessa <a href=\"/blog/2019/08/08/react-v16.9.0.html#an-update-to-the-roadmap\">postagem de lançamento do React 16.9</a>.</p>\n</blockquote>\n<h2 id=\"tldr\"><a href=\"#tldr\" 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>Em Resumo </h2>\n<p>Planejamos separar o desenvolvimento de novas funcionalidades do React nos seguintes marcos:</p>\n<ul>\n<li>React 16.6 com <a href=\"#react-166-shipped-the-one-with-suspense-for-code-splitting\">Suspense para Divisão de Código (Code Splitting)</a> (<em>já lançado</em>)</li>\n<li>Um lançamento minor do 16.x com <a href=\"#react-16x-q1-2019-the-one-with-hooks\">React Hooks</a> (~1º Quadrimestre de 2019)</li>\n<li>Um lançamento minor do 16.x com <a href=\"#react-16x-q2-2019-the-one-with-concurrent-mode\">Modo Concorrente</a> (~2º Quadrimestre de 2019)</li>\n<li>Um lançamento minor do 16.x com <a href=\"#react-16x-mid-2019-the-one-with-suspense-for-data-fetching\">Suspense para Busca de Dados</a> (~meio de 2019)</li>\n</ul>\n<p><em>(A versão original dessa postagem usava números exatos de versões. Nós editamos para refletir que pode ser necessário outros lançamentos minor entre esses acima.)</em></p>\n<p>Estas são estimativas, e os detalhes podem ser modificados conforme nós prosseguirmos. Há ao menos mais dois projetos que nós planejamos completar em 2019. Eles requerem mais pesquisas e não estão atrelados a um lançamento em particular ainda:</p>\n<ul>\n<li><a href=\"#modernizing-react-dom\">Modernizando o React DOM</a></li>\n<li><a href=\"#suspense-for-server-rendering\">Suspense para Renderização no Servidor</a></li>\n</ul>\n<p>Nós esperamos clarificar mais essa linha do tempo nos próximos meses.</p>\n<blockquote>\n<p>Observação</p>\n<p>Essa postagem é apenas um roteiro — não há nele nada que requeira sua atenção imediata. Quando cada uma dessas funcionalidades forem lançadas, nós vamos publicar uma postagem completa para anunciá-las.</p>\n</blockquote>\n<h2 id=\"release-timeline\"><a href=\"#release-timeline\" 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>Linha do Tempo dos Lançamentos </h2>\n<p>Nós temos uma visão única para como essas funcionalidades se encaixam, mas lançaremos cada parte assim que estiver pronta para que você possa testá-las e começar a usá-las mais cedo. O design da API nem sempre faz sentido quando visto como uma peça isolada; essa postagem estabelece as partes principais dos nossos planos para ajudá-lo a observar o todo. (Veja nossa <a href=\"/docs/faq-versioning.html\">política de versão</a> para aprender mais sobre nosso compromisso com a estabilidade)</p>\n<p>A estratégia de lançamento gradual auxilia-nos a refinar as APIs, mas o período de transição quando algumas coisas não estão prontas podem ser confusas. Vamos olhar o que essas funcionalidades diferentes significam para a sua aplicação, como elas se relacionam umas com as outras e quando você pode esperar para começar a aprender e usá-las.</p>\n<h3 id=\"react-166-shipped-the-one-with-suspense-for-code-splitting\"><a href=\"#react-166-shipped-the-one-with-suspense-for-code-splitting\" 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><a href=\"/blog/2018/10/23/react-v-16-6.html\">React 16.6</a> (lançado): O Primeiro com Suspense para Divisão de Código (Code Splitting) </h3>\n<p><em>Suspense</em> se refere a nova habilidade do React de “adiar” a renderização enquanto os componentes estão esperando por alguma coisa, e mostra um indicador de carregamento. No React 16.6, Suspense suporta apenas um caso de uso: componentes de carregamento ocioso (lazy loading) com <code class=\"gatsby-code-text\">React.lazy()</code> e <code class=\"gatsby-code-text\">&lt;React.Suspense&gt;</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// This component is loaded dynamically</span>\n<span class=\"token keyword\">const</span> OtherComponent <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">lazy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">import</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./OtherComponent'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">MyComponent</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>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Suspense</span></span> <span class=\"token attr-name\">fallback</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</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\">Spinner</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </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 plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">OtherComponent</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n      </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 plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Suspense</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Divisão de código com <code class=\"gatsby-code-text\">React.lazy()</code> e com <code class=\"gatsby-code-text\">&lt;React.Suspense&gt;</code> está documentada <a href=\"/docs/code-splitting.html#reactlazy\">no guia de Divisão de Código</a>. Você pode encontrar outra explicação prática <a href=\"https://medium.com/@pomber/lazy-loading-and-preloading-components-in-react-16-6-804de091c82d\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">neste artigo</a>.</p>\n<p>Nós estivemos usando Suspense para divisão de código no Facebook desde Julho, e esperamos que ele esteja estável. Houveram algumas falhas no primeiro lançamento público na 16.6.0, mas elas foram resolvidos na 16.6.3.</p>\n<p>Divisão de código é apenas o primeiro passo para o Suspense. Nossa visão de longo prazo para o Suspense envolve deixar que ele manipule a busca por dados também (e integrar com bibliotecas como Apollo). Além de um modelo prático de programação, Suspense também proveem uma experiência de usuário melhor no Modo Concorrente. Você vai encontrar informações sobre esse tópico mais abaixo.</p>\n<p><strong>Status no React DOM:</strong> Disponível desde React 16.6.0.</p>\n<p><strong>Status no React DOM Server:</strong> Suspense não está disponível para renderização no servidor ainda. Isso não é por falta de atenção. Nós começamos a trabalhar em um novo servidor de renderização assíncrono que vai suportar o Suspense, mas esse é um projeto grande e vamos tomar uma boa parte de 2019 para completar.</p>\n<p><strong>Status no React Native:</strong> Divisão de pacotes não é muito útil no React Native, mas não há nada tecnicamente evitando <code class=\"gatsby-code-text\">React.lazy()</code> e <code class=\"gatsby-code-text\">&lt;Suspense&gt;</code> de trabalharem quando dada uma Promise a um módulo.</p>\n<p><strong>Recomendação:</strong> Se você apenas renderiza no cliente, nós recomendamos fortemente a adoção de <code class=\"gatsby-code-text\">React.lazy()</code> e <code class=\"gatsby-code-text\">&lt;React.Suspense&gt;</code> para divisão de código em componentes React. Se você renderiza no servidor, você terá que esperar para adotar até o novo rederizador de servidor estiver pronto.</p>\n<h3 id=\"react-16x-q1-2019-the-one-with-hooks\"><a href=\"#react-16x-q1-2019-the-one-with-hooks\" 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 16.x (~1º Quadrimestre de 2019): O Primeiro com Hooks </h3>\n<p><em>Hooks</em> permitem a você usar funcionalidades como state e ciclo de vida (lifecycle) em componentes de função. Eles também deixam você reusar a lógica stateful entre componentes sem introduzir aninhamentos extras na sua árvore.</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\">Example</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Declare a new state variable, which we'll call \"count\"</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n   <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 plain-text\">\n     </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n     </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n       Click me\n     </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n   </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>A <a href=\"/docs/hooks-intro.html\">introdução</a> e <a href=\"/docs/hooks-overview.html\">visão geral</a> dos Hooks são bons lugares para começar. Veja <a href=\"https://www.youtube.com/watch?v=V-QO-KO90iQ\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">essas palestras</a> para um vídeo introdutório e um mergulho profundo. As <a href=\"/docs/hooks-faq.html\">Perguntas Frequentes</a> devem responder boa parte de suas possíveis questões. Para aprender mais sobre as motivações por trás dos Hooks, você pode ler <a href=\"https://medium.com/@dan_abramov/making-sense-of-react-hooks-fdbde8803889\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">este artigo</a>. Algumas das bases lógicas para o design da API dos Hooks são explicadas <a href=\"https://github.com/reactjs/rfcs/pull/68#issuecomment-439314884\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">nessas respostas do RFC</a>.</p>\n<p>Estamos usando os Hooks no Facebook desde Setembro. Nós não esperávamos bugs grandes na implementação. Hooks estarão disponíveis apenas na versão alfa da 16.7 do React. Espera-se que algumas APIS sejam alteradas na versão final (veja o fim <a href=\"https://github.com/reactjs/rfcs/pull/68#issuecomment-439314884\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">desse comentário</a> para detalhamentos). É possível que o lançamento minor com Hooks não seja React 16.7.</p>\n<p>Hooks representam nossa visão para o futuro do React. Eles resolvem tanto os problemas que usuários do React experienciam diretamente (“inferno de envolvimento” (“wrapper hell”) de props de renderização e componentes de alta-ordem, duplicação de lógica nos métodos de ciclo de vida), quanto as questões que nós encontramos otimizando o React a escalar (tal como dificuldades em alinhamento de componentes com um compilador). Hooks não descontinuam as classes. Contudo, se os Hooks forem bem sucedidos, é possível que, em um futuro lançamento <em>major</em>, o suporte a classes pode mover a um pacote separado, reduzindo o tamanho padrão do pacote do React.</p>\n<p><strong>Status em React DOM:</strong> A primeira versão do <code class=\"gatsby-code-text\">react</code> e <code class=\"gatsby-code-text\">react-dom</code> a suportar Hooks é <code class=\"gatsby-code-text\">16.7.0-alpha.0</code>. Nós esperamos publicar mais alfas ao longo dos próximos meses (no momento que escrevo, a mais recente é a <code class=\"gatsby-code-text\">16.7.0-alpha.2</code>). Você pode tentá-los instalando <code class=\"gatsby-code-text\">react@next</code> com <code class=\"gatsby-code-text\">react-dom@next</code>. Não esqueça de atualizar <code class=\"gatsby-code-text\">react-dom</code> — caso contrário os Hooks não funcionarão.</p>\n<p><strong>Status em React DOM Server:</strong> As mesmas versões alfa da 16.7 do <code class=\"gatsby-code-text\">react-dom</code> suportam completamente os Hooks com <code class=\"gatsby-code-text\">react-dom/server</code>.</p>\n<p><strong>Status em React Native:</strong> Não há uma maneira oficial suportada para tentar os Hooks no React Native ainda. Se você estiver com espírito aventureiro, veja <a href=\"https://github.com/facebook/react-native/issues/21967\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">essa conversa</a> para instruções não oficiais. Há uma questão conhecida com o <code class=\"gatsby-code-text\">useEffect</code> sendo chamada bem atrasada no qual ainda precise ser resolvida.</p>\n<p><strong>Recomendação:</strong> Quando você estiver pronto, nós encorajaremos você a começar a usar os Hooks em novos componentes que escrever. Ter certeza que todo mundo no seu time está integrado em usá-los e familiarizado com sua documentação. Nós não recomendamos reescrever suas classes existentes para Hooks a menos que você planejou reescrevê-los mesmo (por exemplo: para resolver bugs). Leia mais sobre a estratégia de adoção <a href=\"/docs/hooks-faq.html#adoption-strategy\">aqui</a>.</p>\n<h3 id=\"react-16x-q2-2019-the-one-with-concurrent-mode\"><a href=\"#react-16x-q2-2019-the-one-with-concurrent-mode\" 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 16.x (~2º Quadrimestre de 2019): O Primeiro com Modo Concorrente </h3>\n<p><em>Modo Concorrente</em> permite aplicações React a serem mais responsivas por renderizar árvores de componentes sem bloquear a thread principal. Isso é permitido pelo usuário e permite ao React a interromper uma renderização de longa duração (por exemplo, renderizando uma história de feed de notícias) para manipular um evento de alta prioridade (por exemplo, entrada de texto ou hover). Modo Concorrente também melhora a experiência do usuário com Suspense por pular carregamento de states desnecessários em conexões rápidas.</p>\n<blockquote>\n<p>Observação</p>\n<p>Você pode ter ouvido previamente o Modo Concorrente ser referenciado como <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">“modo assíncrono”</a>. Nós alteramos o nome para Modo Concorrente para ressaltar a habilidade do React em trabalhar em diferentes níveis de prioridade. Isso o diferencia de outras abordagens para renderização assíncrona.</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// Two ways to opt in:</span>\n\n<span class=\"token comment\">// 1. Part of an app (not final API)</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>React.unstable_ConcurrentMode</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Something</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>React.unstable_ConcurrentMode</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token comment\">// 2. Whole app (not final API)</span>\nReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">unstable_createRoot</span><span class=\"token punctuation\">(</span>domNode<span class=\"token punctuation\">)</span><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><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Não há documentação para o Modo Concorrente ainda. É importante pontuar que o modelo conceitual poderá ser estranho de primeira. Documentar seus benefícios, como usar isso eficientemente e suas armadilhas são uma prioridade alta para nós e serão um pré-requisito para chamar isso de estável. Até lá, A <a href=\"https://www.youtube.com/watch?v=ByBPyMBTzM0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">palestra do Andrew</a> é a melhor introdução disponível.</p>\n<p>O Modo Concorrente é <em>muito</em> menos polido do que Hooks. Algumas APIs não estão corretamente “ligadas” ainda e não fazem o que se espera deles. No momento de escrita dessa postagem, nós não recomendamos usar isso para qualquer coisa exceto experimentação com muita antecedência. Nós não esperamos muito bugs no próprio Modo Concorrente, mas note que componentes que produzem avisos no <a href=\"https://reactjs.org/docs/strict-mode.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">&lt;React.StrictMode&gt;</code></a> podem não funcionar corretamente. Em uma nota separada, nós vimos que o Modo Concorrente <em>apresenta</em> problemas de desempenho em outro código que às vezes podem ser confundidos com problemas de desempenho no próprio Modo Concorrente. Por exemplo, uma chamada perdida <code class=\"gatsby-code-text\">setInterval(fn, 1)</code> que executa todo milisegundo pode ter um efeito horrível no Modo Concorrente. Nós planejamos publicar mais guias sobre diagnosticar e resolver problemas como esse como parte de uma documentação de lançamento.</p>\n<p>O Modo Concorrente é uma grande parte de nossa visão para o React. Para trabalho CPU-bound, ele permite renderização não-bloqueante e mantém sua aplicação responsiva enquanto renderiza árvores de componentes complexas. Isso é demonstrado na primeira parte de <a href=\"/blog/2018/03/01/sneak-peek-beyond-react-16.html\">nossa palestra na JSConf na Islândia</a>. O Modo Concorrente também produz Suspense melhores. Ele deixa você evitar indicadores de carregamento piscando se a rede é rápida o suficiente. É difícil para explicar sem ver então a <a href=\"https://www.youtube.com/watch?v=ByBPyMBTzM0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">palestra do Andrew</a> é o melhor recurso disponível hoje. O Modo Concorrente depende de um <a href=\"https://github.com/facebook/react/tree/master/packages/scheduler\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">escalonador</a> cooperativo de thread principal e nós estamos <a href=\"https://www.youtube.com/watch?v=mDdgfyRB5kg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">colaborando com o time do Chrome</a> para eventualmente mover essa funcionalidade para dentro do próprio navegador.</p>\n<p><strong>Status em React DOM:</strong> Uma versão <em>muito</em> instável do Modo Concorrente está disponível atráves de um prefixo <code class=\"gatsby-code-text\">unstable_</code> no React 16.6 mas não recomendamos tentando isso a menos que você esteja disposto a muitas vezes ultrapassar obstáculos ou funcionalidades faltando. Os alphas 16.7 incluem <code class=\"gatsby-code-text\">React.ConcurrentMode</code> e <code class=\"gatsby-code-text\">ReactDOM.createRoot</code> sem um prefixo <code class=\"gatsby-code-text\">unstable_</code>, mas nós gostaríammos de manter os prefixos em 16.7 e apenas documentar e marcar o Modo Concorrente como estável nesses lançamentos minor futuros.</p>\n<p><strong>Status em React DOM Server:</strong> Modo Concorrente não afeta diretamente a renderização no servidor. Ele vai funcionar com o renderizador de servidor existente.</p>\n<p><strong>Status em React Native:</strong> O plano atual é atrasar a disponibilização do Modo Concorrente no React Native até que o projeto do <a href=\"https://github.com/react-native-community/discussions-and-proposals/issues/4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Fabric</a> esteja perto de completar.</p>\n<p><strong>Recomendação:</strong> Se você deseja adotar o Modo Concorrente no futuro, englobar algumas subárvores de componentes em <a href=\"https://reactjs.org/docs/strict-mode.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">&lt;React.StrictMode&gt;</code></a> e resolver os alertas resultantes é um bom primeiro passo. No geral não é esperado que código legado vá imediatamente ser compatível. Por exemplo, no Facebook pretendemos usar o Modo Concorrente na maior parte da mais recente base de código desenvolvida e manter aqueles legados executando no modo síncrono pelo futuro próximo.</p>\n<h3 id=\"react-16x-mid-2019-the-one-with-suspense-for-data-fetching\"><a href=\"#react-16x-mid-2019-the-one-with-suspense-for-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>React 16.x (~meio de 2019): O Primeiro com Suspense para Busca de Dados </h3>\n<p>Como mencionado anteriormente, <em>Suspense</em> refere-se a habilidade do react de “suspender” a renderização enquanto os componentes esperam por alguma coisa e mostrar um indicador de carregamento. No já lançado React 16.6, o único caso de uso suportado para Suspense é divisão de código. Nesse futuro lançamento minor, gostaríamos de prover oficialmente maneiras suportadas para usar isso com busca de dados também. Nós vamos prover uma implementação de referência para um básico “React Cache” que é compatível com Suspense, mas você também pode escrever o seu próprio. Bibliotecas de busca de dados como Apollo e Relay vão ser possível de integrar com Suspense seguindo uma simples especificação que nós vamos documentar.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// React Cache for simple data fetching (not final API)</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>unstable_createResource<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-cache'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Tell React Cache how to fetch your data</span>\n<span class=\"token keyword\">const</span> TodoResource <span class=\"token operator\">=</span> <span class=\"token function\">unstable_createResource</span><span class=\"token punctuation\">(</span>fetchTodo<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Todo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Suspends until the data is in the cache</span>\n  <span class=\"token keyword\">const</span> todo <span class=\"token operator\">=</span> TodoResource<span class=\"token punctuation\">.</span><span class=\"token function\">read</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</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>todo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</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>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</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>\n    <span class=\"token comment\">// Same Suspense component you already use for code splitting</span>\n    <span class=\"token comment\">// would be able to handle data fetching too.</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Suspense</span></span> <span class=\"token attr-name\">fallback</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</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\">Spinner</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token punctuation\">{</span><span class=\"token comment\">/* Siblings fetch in parallel */</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Todo</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>1<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Todo</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>2<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Suspense</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// Other libraries like Apollo and Relay can also</span>\n<span class=\"token comment\">// provide Suspense integrations with similar APIs.</span></code></pre></div>\n<p>Não há documentação oficial para como buscar dados com Suspense ainda, mas você pode encontrar alguma informação prévia <a href=\"https://youtu.be/ByBPyMBTzM0?t=1312\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">nessa palestra</a> e <a href=\"https://github.com/facebook/react/tree/master/fixtures/unstable-async/suspense\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">nesse pequeno exemplo</a>. Nós vamos escrever uma documentação para o React Cache (e como escrever sua própria biblioteca compatível com Suspense) próximo a esse lançamento do React, mas se você estiver curioso, você pode encontrar esse prévio código fonte <a href=\"https://github.com/facebook/react/blob/master/packages/react-cache/src/ReactCache.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">aqui</a>.</p>\n<p>O mecanismo de baixo nível de Suspense (suspendendo a renderização e mostrando uma alternativa) é esperado ser estável ainda no React 16.6. Nós usamos isso para divisão de código em produção por meses. Entretanto, APIs de alto nível para busca de dados são muito instáveis. React Cache está rapidamente mudando e vai mudar ao menos várias vezes. Existem algumas APIs de baixo nível que estão <a href=\"https://github.com/reactjs/rfcs/pull/89\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">faltando</a> para que uma boa API de alto nível seja possível. Nós não recomendamos usar React Cache em qualquer lugar exceto experimentação com muita antecedência. Note que o próprio React Cache não é estritamente preso a um lançamento do React, mas o atual alpha não possue funcionalidades básicas como invalidação de cache e você vai chegar num limite logo cedo. Nós esperamos ter alguma coisa usável com esse lançamento do React.</p>\n<p>Eventualmente nós gostaríamos que boa parte da busca de dados aconteçam através de Suspense, mas isso vai levar um longo tempo até toda integração esteja pronta. Na prática nós esperamos que isso seja adotado muito incrementalmente e boa parte através de camadas como Apollo ou Relay ao invés de diretamente. APIs de alto nível faltando não são o único obstáculo — há também alguns padrões de IU importante que nós não suportamos ainda tais quais <a href=\"https://github.com/facebook/react/issues/14248\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">mostrar indicador de progresso fora da hierarquia de visão de carregamento</a>. Como sempre, nós vamos comunicar nosso progresso em notas de lançamento nesse blog.</p>\n<p><strong>Status em React DOM and React Native:</strong> Tecnicamente, um cache compatível já vai funcionar com <code class=\"gatsby-code-text\">&lt;React.Suspense&gt;</code> no React 16.6. Entretanto , nós não esperamos ter uma boa implementação de cache até esse lançamento minor do React. Se você estiver com espírito aventureiro, você pode tentar escrever seu próprio cache vendo nos alphas do React Cache. Todavia, note que o modelo mental é suficientemente diferente que tem um alto risco de não entendimento até que a documentação esteja pronta.</p>\n<p><strong>Status em React DOM Server:</strong> Suspense não está disponível para renderizador de servidor ainda. Como nós mencionamos anteriormente, nós começamos a trabalhar em um novo rederizador assíncrono que vai suportar Suspense, mas esse é um projeto grande e vai levar uma boa parte de 2019 para completar.</p>\n<p><strong>Recomendação:</strong> Esperar por esse lançamento minor do React para usar Suspense para busca de dados. Não tente usar as funcionalidades de Suspense no 16.6 para isso; Isso não é suportado. Entretanto, seus componentes <code class=\"gatsby-code-text\">&lt;Suspense&gt;</code> existentes para divisão de código vão poder mostrar estado de carregamento para dados também quando Suspense para Busca de Dados vier oficialmente a ser suportado.</p>\n<h2 id=\"other-projects\"><a href=\"#other-projects\" 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>Outros Projetos </h2>\n<h3 id=\"modernizing-react-dom\"><a href=\"#modernizing-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>Modernizando React DOM </h3>\n<p>Nós começamos uma investigação para <a href=\"https://github.com/facebook/react/issues/13525\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">simplificar e modernizar</a> o ReactDOM, com um objetivo de reduzir o tamanho do pacote e se aproximar do comportamento do navegador. Ainda é cedo para dizer quais pontos específicos vão “fazer isso” porque o projeto está em uma fase exploratória. Nós vamos comunicar nosso progresso nessa issue.</p>\n<h3 id=\"suspense-for-server-rendering\"><a href=\"#suspense-for-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>Suspense para Renderização em Servidor </h3>\n<p>Nós começamos a projetar um novo renderizador de servidor que suporte Suspense (incluindo espera por dados assíncronos no servidor sem renderização dupla), carregamento progressivo e preenchimento do conteúdo da página em pedaços para um melhor experiência do usuário. Você pode assistir um resumo do protótipo prévio disso <a href=\"https://www.youtube.com/watch?v=z-6JC0_cOns\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">nessa palestra</a>. O novo renderizado de servidor será nosso foco principal em 2019, mas é muito cedo para falar qualquer coisa sobre sua programação de lançamento. Seu desenvolvimento, como sempre, <a href=\"https://github.com/facebook/react/pulls?utf8=%E2%9C%93&#x26;q=is%3Apr+is%3Aopen+fizz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">acontecerá no GitHub</a>.</p>\n<hr>\n<p>E é isso! Como você pode ver, tem muito a ocupar-nos, mas nós esperamos bastante progresso nos próximos meses.</p>\n<p>Nós esperamos que essa postagem dê a você ideias do que nós estamos trabalhando, o que você pode usar hoje, e o que você pode esperar para usar futuramente. Enquanto há várias discussões sobre novas funcionalidades em plataformas de mídias sociais, você não vai perder nada importante se ler esse blog.</p>\n<p>Nós estamos sempre abertos para feedback, e amamos ouvir de vocês no <a href=\"https://github.com/reactjs/rfcs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">repositório de RFC</a>, <a href=\"https://github.com/facebook/react/issues\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">o rastreador de issue</a>, e <a href=\"https://mobile.twitter.com/reactjs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">no Twitter</a>.</p>","excerpt":"Você pode ter ouvido falar sobre funcionalidades como “Hooks”, “Suspense”, e “Renderização Concorrente” em postagens passadas no blog ou em palestras. Nesta postagem, nós vamos ver como elas se encaixam e a linha do tempo esperada para seus lançamentos em versões estáveis do React. Uma Atualização de Agosto de 2019 Você pode encontrar uma atualização de roteiro nessa postagem de lançamento do React 16.9. Em Resumo  Planejamos separar o desenvolvimento de novas funcionalidades do React nos…","frontmatter":{"title":"Roteiro do React 16.x","next":null,"prev":null,"author":[{"frontmatter":{"name":"Dan Abramov","url":"https://twitter.com/dan_abramov"}}]},"fields":{"date":"27 de novembro de 2018","path":"content/blog/2018-11-27-react-16-roadmap.md","slug":"/blog/2018/11/27/react-16-roadmap.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/2018/11/27/react-16-roadmap.html"}},"staticQueryHashes":[]}