{"componentChunkName":"component---src-templates-docs-js","path":"/docs/concurrent-mode-adoption.html","result":{"data":{"markdownRemark":{"html":"<style>\n.scary > blockquote {\n  background-color: rgba(237, 51, 21, 0.2);\n  border-left-color: #ed3315;\n}\n</style>\n<div class=\"scary\">\n<blockquote>\n<p>Atenção:</p>\n<p>Esta página descreve <strong>recursos experimentais que ainda não estão disponíveis numa versão estável</strong>. Não confie nas versões experimentais do React em aplicativos de produção. Esses recursos podem mudar significativamente e sem aviso antes de se tornarem parte do React.</p>\n<p>Esta documentação é destinada a adotantes precoces e pessoas curiosas. <strong>Se você é iniciante no React, não se preocupe com esses recursos</strong> — não precisa aprendê-los agora.</p>\n</blockquote>\n</div>\n<ul>\n<li>\n<p><a href=\"#installation\">Instalação</a></p>\n<ul>\n<li><a href=\"#who-is-this-experimental-release-for\">A Quem os Recursos Experimentais se Destinam?</a></li>\n<li><a href=\"#enabling-concurrent-mode\">Habilitando o Modo Concorrente</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#what-to-expect\">O Que Esperar</a></p>\n<ul>\n<li><a href=\"#migration-step-blocking-mode\">Etapa de Migração: Modo Bloqueante</a></li>\n<li><a href=\"#why-so-many-modes\">Por Que Tantos Modos?</a></li>\n<li><a href=\"#feature-comparison\">Comparativo de Recursos</a></li>\n</ul>\n</li>\n</ul>\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>O Modo Concorrente está disponível apenas em <a href=\"/blog/2019/10/22/react-release-channels.html#experimental-channel\">versões experimentais</a> do React. Para instalá-las, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">npm install react@experimental react-dom@experimental</code></pre></div>\n<p><strong>Não existem garantias de versionamento semântico para versões experimentais.</strong><br>\nAPIs podem ser adicionadas, alteradas ou removidas em qualquer versão <code class=\"gatsby-code-text\">@experimental</code>.</p>\n<p><strong>Versões experimentais constantemente terão alterações com problemas.</strong></p>\n<p>Você pode testar essas versões nos seus projetos pessoais ou em uma branch, mas nós não recomendamos utilizar elas em produção. No Facebook, nós utilizamos elas em produção, mas isso é porque nós estamos prontos para corrigir os problemas assim que ocorrem. Você deve estar atento a isso.</p>\n<h3 id=\"who-is-this-experimental-release-for\"><a href=\"#who-is-this-experimental-release-for\" 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 Quem os Recursos Experimentais se Destinam? </h3>\n<p>Esta versão é destinada a adotantes precoces, autores de livros e pessoas curiosas.</p>\n<p>Nós estamos usando esse código em produção (e funciona para nós), mas ainda possui alguns problemas, recursos faltando e falta de documentação. Nós gostaríamos de saber mais caso algo quebre no Modo Concorrente assim nós podemos ajustar na versão estável que será oficialmente disponibilizada futuramente.</p>\n<h3 id=\"enabling-concurrent-mode\"><a href=\"#enabling-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>Habilitando o Modo Concorrente </h3>\n<p>Normalmente, quando nós adicionamos recursos ao React, você pode começar a usá-lo imediatamente. Fragments, Context e até mesmo Hooks são exemplos desses recursos. Você pode usá-los no novo código sem fazer alterações no código existente.</p>\n<p>O Modo Concorrente é diferente. Ele introduz alterações semânticas na forma do React funcionar. Do contrário, os <a href=\"/docs/concurrent-mode-patterns.html\">novos recursos</a> habilitados por ele <em>não teriam se tornado possíveis</em>. Este é o motivo de eles estarem agrupadas em um novo “modo” ao invés de serem liberados um a um isoladamente.</p>\n<p>Você não pode utilizar o Modo Concorrente apenas em uma sub árvore do seu aplicativo. Para utilizá-lo, você deve incluir no ponto onde atualmente você chama <code class=\"gatsby-code-text\">ReactDOM.render()</code>.</p>\n<p><strong>Isso irá habilitar o modo concorrente para toda a árvore <code class=\"gatsby-code-text\">&lt;App /&gt;</code>:</strong></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> ReactDOM <span class=\"token keyword\">from</span> <span class=\"token string\">'react-dom'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Se anteriormente você tinha:</span>\n<span class=\"token comment\">//</span>\n<span class=\"token comment\">// ReactDOM.render(&lt;App />, document.getElementById('root'));</span>\n<span class=\"token comment\">//</span>\n<span class=\"token comment\">// Você pode incluir o Modo Concorrente escrevendo:</span>\n\nReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">unstable_createRoot</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><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<blockquote>\n<p>Nota:</p>\n<p>As APIs do Modo Concorrente como <code class=\"gatsby-code-text\">createRoot</code>apenas existem em versões experimentais do React.</p>\n</blockquote>\n<p>No Modo Concorrente, os métodos do ciclo de vida <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">anteriormente marcados</a> como “inseguros” são <em>realmente</em> inseguros, e podem gerar ainda mais problemas do que na versão atual do React. Nós não recomendamos testar o Modo Concorrente até que sua aplicação seja compatível com o <a href=\"/docs/strict-mode.html\">Strict Mode</a>.</p>\n<h2 id=\"what-to-expect\"><a href=\"#what-to-expect\" 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>O Que Esperar </h2>\n<p>Se você tem uma aplicação existente muito grande, ou se a sua aplicação depende de muitas bibliotecas de terceiros, por favor não comece a utilizar o Modo Concorrente imediatamente. <strong>Por exemplo, no Facebook nós estamos usando o Modo Concorrente para o nosso novo website, mas não planejamos habilitá-lo na versão antiga.</strong> Isto porque o nosso website antigo ainda utiliza métodos de ciclo de vida inseguros em código de produção, e alguns padrões que não funcionam bem com o Modo Concorrente.</p>\n<p>De acordo com nossa experiência, utilizar os padrões idiomáticos do React no código e não utilizar soluções externas para gerenciamento de estado são a maneira mais fácil de iniciar a utilização do Modo Concorrente. Nós vamos descrever problemas comuns que nós experimentamos e as soluções para cada um deles nas próximas semanas.</p>\n<h3 id=\"migration-step-blocking-mode\"><a href=\"#migration-step-blocking-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>Etapa de Migração: Modo Bloqueante </h3>\n<p>Para códigos antigos, o Modo Concorrente pode ser um passo muito grande. Este é o motivo de nós também termos disponibilizado o novo “Modo Bloqueante” nas versões experimentais do React. Você pode testá-lo substituindo <code class=\"gatsby-code-text\">createRoot</code> por <code class=\"gatsby-code-text\">createBlockingRoot</code>. Isso apenas confere uma <em>pequena parte</em> dos recursos presentes no Modo Concorrente, mas é mais próximo da forma como o React funciona hoje e pode servir como um passo na migração.</p>\n<p>Para recaptular:</p>\n<ul>\n<li><strong>Modo Legado:</strong> <code class=\"gatsby-code-text\">ReactDOM.render(&lt;App /&gt;, rootNode)</code>. Está é a forma que os aplicativos React usam hoje. Não existem planos para remover o Modo Legado num futuro próximo — mas não será possível dar suporte para esses novos recursos.</li>\n<li><strong>Modo Bloqueante:</strong> <code class=\"gatsby-code-text\">ReactDOM.createBlockingRoot(rootNode).render(&lt;App /&gt;)</code>. Atualmente é experimental. A intenção é que seja um primeiro passo na migração para aplicativos que desejam utilizar uma parte dos recursos do Modo Concorrente.</li>\n<li><strong>Modo Concorrente:</strong> <code class=\"gatsby-code-text\">ReactDOM.createRoot(rootNode).render(&lt;App /&gt;)</code>. Atualmente é experimental. No futuro, após se tornar estável, nos planejamos torná-lo o modo padrão do React. Esse modo habilita <em>todos</em> os novos recursos.</li>\n</ul>\n<h3 id=\"why-so-many-modes\"><a href=\"#why-so-many-modes\" 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 Tantos Modos? </h3>\n<p>Nós acreditamos que é melhor oferecer uma <a href=\"/docs/faq-versioning.html#commitment-to-stability\">estratégia de migração gradativa</a> do que fazer grandes mudanças — ou então deixar o React estagnado na irrelevância.</p>\n<p>Na prática, nós esperamos que a maioria dos aplicativos que hoje estão usando o Modo Legado possam migrar pelo menos para o Modo Bloqueante (se não para o Modo Concorrente). Esta fragmentação pode ser incômoda para bibliotecas que almejam dar suporte para todos os modos em curto prazo. No entanto, gradativamente migrando o ecossistema irá <em>resolver</em> problemas que afetam a maioria das bibliotecas no ecossistema do React, bem como  <a href=\"https://github.com/facebook/react/issues/14536\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">comportamentos confusos do Suspense quando lê o layout</a> e <a href=\"https://github.com/facebook/react/issues/15080\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">a falta de garantias consistentes de gerenciamento em lote</a>. Existe um número grande de problemas que não podem ser resolvidos no Modo Legado sem mudanças na semântica, e que não ocorrem nos modos Bloqueante e Concorrente.</p>\n<p>Você pode pensar no Modo Bloqueante como uma versão suavemente degradada do Modo Concorrente. <strong>Como resultado, a longo prazo nós poderemos convergir e parar de pensar em modos diferentes.</strong> Mas não de imediato, Modos são uma importante estratégia de migração. Eles permitem que todos decidam quando a migração vale a pena, e atualizar em seu próprio ritmo.</p>\n<h3 id=\"feature-comparison\"><a href=\"#feature-comparison\" 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>Comparativo de Recursos </h3>\n<style>\n  #feature-table table { border-collapse: collapse; }\n  #feature-table th { padding-right: 30px; }\n  #feature-table tr { border-bottom: 1px solid #eee; }\n</style>\n<div id=\"feature-table\">\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Modo Legado</th>\n<th>Modo Bloqueante</th>\n<th>Modo Concorrente</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"/docs/refs-and-the-dom.html#legacy-api-string-refs\">String Refs</a></td>\n<td>✅</td>\n<td>🚫**</td>\n<td>🚫**</td>\n</tr>\n<tr>\n<td><a href=\"/docs/legacy-context.html\">Legacy Context</a></td>\n<td>✅</td>\n<td>🚫**</td>\n<td>🚫**</td>\n</tr>\n<tr>\n<td><a href=\"/docs/strict-mode.html#warning-about-deprecated-finddomnode-usage\">findDOMNode</a></td>\n<td>✅</td>\n<td>🚫**</td>\n<td>🚫**</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-suspense.html#what-is-suspense-exactly\">Suspense</a></td>\n<td>✅</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-patterns.html#suspenselist\">SuspenseList</a></td>\n<td>🚫</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Suspense SSR + Hydration</td>\n<td>🚫</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Progressive Hydration</td>\n<td>🚫</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Selective Hydration</td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Cooperative Multitasking</td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Automatic batching of multiple setStates     </td>\n<td>🚫*</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-patterns.html#splitting-high-and-low-priority-state\">Priority-based Rendering</a></td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-intro.html#interruptible-rendering\">Interruptible Prerendering</a></td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-patterns.html#transitions\">useTransition</a></td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-patterns.html#deferring-a-value\">useDeferredValue</a></td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n<tr>\n<td><a href=\"/docs/concurrent-mode-patterns.html#suspense-reveal-train\">Suspense Reveal “Train”</a></td>\n<td>🚫</td>\n<td>🚫</td>\n<td>✅</td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>*: O modo Legado possui eventos gerenciados pelo React em lote mas é limitado a uma tarefa do navegador. Eventos que não são do React podem utilizá-lo através do <code class=\"gatsby-code-text\">unstable_batchedUpdates</code>. No Modo Bloqueante e Concorrente, todos os <code class=\"gatsby-code-text\">setState</code>s são feitos em lote por padrão.</p>\n<p>**: Avisa em desenvolvimento.</p>","frontmatter":{"title":"Adotando o Modo Concorrente (Experimental)","next":"concurrent-mode-reference.html","prev":"concurrent-mode-patterns.html"},"fields":{"path":"content/docs/concurrent-mode-adoption.md","slug":"docs/concurrent-mode-adoption.html"}}},"pageContext":{"slug":"docs/concurrent-mode-adoption.html"}},"staticQueryHashes":[]}