{"componentChunkName":"component---src-templates-docs-js","path":"/docs/strict-mode.html","result":{"data":{"markdownRemark":{"html":"<p>O modo estrito (<code class=\"gatsby-code-text\">Strict Mode</code>) é uma ferramenta para sinalizar potenciais problemas em uma aplicação. Assim como o <code class=\"gatsby-code-text\">Fragment</code>, o <code class=\"gatsby-code-text\">StrictMode</code> não renderiza nenhum elemento visível na interface. Ele ativa, no entanto, verificações e avisos adicionais para os seus descendentes.</p>\n<blockquote>\n<p>Nota:</p>\n<p>Verificações do modo estrito são executadas somente em modo de desenvolvimento; <em>elas não impactam na build de produção</em>.</p>\n</blockquote>\n<p>Você pode habilitar o modo estrito para qualquer parte da sua aplicação, por exemplo:\n<div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><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\n<span class=\"token keyword\">function</span> <span class=\"token function\">ExampleApplication</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>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Header</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.StrictMode</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">ComponentOne</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">ComponentTwo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.StrictMode</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Footer</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>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>\n        </div></p>\n<p>No exemplo acima, as verificações do modo estrito <em>não</em> serão executadas nos componentes <code class=\"gatsby-code-text\">Header</code> e <code class=\"gatsby-code-text\">Footer</code>. No entanto, <code class=\"gatsby-code-text\">ComponentOne</code> e <code class=\"gatsby-code-text\">ComponentTwo</code>, assim como todos os seus componentes descendentes, serão verificados.</p>\n<p>O modo estrito ajuda atualmente com:</p>\n<ul>\n<li><a href=\"#identifying-unsafe-lifecycles\">Identificação de métodos de ciclo de vida (lifecycles) inseguros</a></li>\n<li><a href=\"#warning-about-legacy-string-ref-api-usage\">Avisos em relação ao uso da antiga string ref API</a></li>\n<li><a href=\"#warning-about-deprecated-finddomnode-usage\">Avisos em relação ao uso do depreciado findDOMNode</a></li>\n<li><a href=\"#detecting-unexpected-side-effects\">Detecção de efeitos colaterais (side effects) inesperados</a></li>\n<li><a href=\"#detecting-legacy-context-api\">Detecção de uso da antiga API de contexto (Context API)</a></li>\n</ul>\n<p>Funcionalidades adicionais serão adicionadas em versões futuras do React.</p>\n<h3 id=\"identifying-unsafe-lifecycles\"><a href=\"#identifying-unsafe-lifecycles\" 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>Identificar métodos de ciclo de vida (lifecycles) inseguros </h3>\n<p>Como explicado <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">neste post</a>, alguns antigos métodos de ciclo de vida (lifecycles) são inseguros de serem usados em aplicações assíncronas do React. Contudo, se a sua aplicação usa bibliotecas customizadas, pode ser difícil de verificar que esses métodos de ciclo de vida não estão sendo usados. Felizmente, o modo estrito pode ajudar nisso!</p>\n<p>Quando o modo estrito está ativado, o React compila uma lista de todos os componentes classe que usam ciclos de vida inseguros e imprime no console uma mensagem de aviso com informações relativas a estes componentes, como:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e4fdbff774b356881123e69ad88eda88/1628f/strict-mode-unsafe-lifecycles-warning.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 840px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 13.80952380952381%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAjElEQVQI112Oaw6CQAwGuf/RRBcJETWR8Fh5BNZkuUDHFkw0/pjka9NOm8jJIYcUSY87LkPOOXIpoa4R75G+h7aFpoFxhHWFGL9Y/SHBFlXA7Q7lFR4VdB5M5J977jqYJhgGlaq4qvaeoXPbMT1uJCHLWJwjFAUvFc/67ZznRPsmBGRZNixvWP6t//pvEpXgSjHsOOkAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"strict mode unsafe lifecycles warning\"\n        title=\"\"\n        src=\"/static/e4fdbff774b356881123e69ad88eda88/1e088/strict-mode-unsafe-lifecycles-warning.png\"\n        srcset=\"/static/e4fdbff774b356881123e69ad88eda88/65ed1/strict-mode-unsafe-lifecycles-warning.png 210w,\n/static/e4fdbff774b356881123e69ad88eda88/d10fb/strict-mode-unsafe-lifecycles-warning.png 420w,\n/static/e4fdbff774b356881123e69ad88eda88/1e088/strict-mode-unsafe-lifecycles-warning.png 840w,\n/static/e4fdbff774b356881123e69ad88eda88/1628f/strict-mode-unsafe-lifecycles-warning.png 1232w\"\n        sizes=\"(max-width: 840px) 100vw, 840px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<p>Resolver os problemas identificados pelo modo estrito <em>agora</em>, facilitará a utilização da renderização concorrente em versões futuras do React.</p>\n<h3 id=\"warning-about-legacy-string-ref-api-usage\"><a href=\"#warning-about-legacy-string-ref-api-usage\" 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>Aviso em relação ao uso da antiga string ref API </h3>\n<p>Anteriormente, o React fornecia duas maneiras de gerenciar refs: a antiga string ref API e a callback API. Embora a string ref API fosse a mais conveniente das duas, ela apresentava <a href=\"https://github.com/facebook/react/issues/1373\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">várias desvantagens</a> e, portanto, nossa recomendação oficial era <a href=\"/docs/refs-and-the-dom.html#legacy-api-string-refs\">usar o formulário de callback</a>.</p>\n<p>O React 16.3 adicionou uma terceira opção que oferece a conveniência da string ref sem qualquer desvantagem:\n<div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">MyComponent</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</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 keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">createRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">ref</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">componentDidMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">.</span><span class=\"token function\">focus</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n        </div></p>\n<p>Como refs de objetos foram adicionadas como substitutos para as string refs, o modo estrito agora avisa em relação ao uso da antiga string ref API.</p>\n<blockquote>\n<p><strong>Nota:</strong></p>\n<p>Callback refs continuarão a ter suporte juntamente com a nova <code class=\"gatsby-code-text\">createRef</code> API (introduzida no React 16.3).</p>\n<p>Você não precisa substituir callback refs em seus componentes. Elas são um pouco mais flexíveis, então continuam a ser um recurso avançado.</p>\n</blockquote>\n<p><a href=\"/docs/refs-and-the-dom.html\">Saiba mais sobre a nova <code class=\"gatsby-code-text\">createRef</code> API aqui.</a></p>\n<h3 id=\"warning-about-deprecated-finddomnode-usage\"><a href=\"#warning-about-deprecated-finddomnode-usage\" 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>Aviso em relação ao uso do depreciado findDOMNode </h3>\n<p>O React costumava suportar <code class=\"gatsby-code-text\">findDOMNode</code> para procurar na árvore por um elemento DOM dada uma instância de classe. Normalmente, você não precisa disso, já que você pode <a href=\"/docs/refs-and-the-dom.html#creating-refs\">anexar uma ref diretamente em um elemento DOM</a>.</p>\n<p><code class=\"gatsby-code-text\">findDOMNode</code> também pode ser usado em componentes de classe, mas isso estava quebrando níveis de abstração ao permitir que um componente pai demandasse que certos componentes filhos fossem renderizados. Ele cria um risco de refatoração em que você não pode alterar os detalhes de implementação de um componente por que um componente pai pode estar alcançando o seu elemento DOM. <code class=\"gatsby-code-text\">findDOMNode</code> somente retorna o primeiro filho, mas com o uso de fragmentos, é possível que um componente renderize múltiplos elementos DOM. <code class=\"gatsby-code-text\">findDOMNode</code> é uma API de única leitura. Só enviava resposta quando você chamava. Se um componente filho renderiza um elemento diferente, não há como lidar com essa mudança. Portando, <code class=\"gatsby-code-text\">findDOMNode</code> só funcionava se os componentes sempre retornassem um único elemento DOM que nunca muda.</p>\n<p>Você pode deixar isso explícito se passar uma ref para o seu componente customizado, passando-a através do DOM usando <a href=\"/docs/forwarding-refs.html#forwarding-refs-to-dom-components\"><code class=\"gatsby-code-text\">encaminhamento de ref</code></a>.</p>\n<p>Você também pode adicionar um elemento DOM que envolve o seu componente e anexar uma ref diretamente a ele.</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">MyComponent</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</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 keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>wrapper <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">createRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">ref</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>wrapper<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<blockquote>\n<p>Nota:</p>\n<p>Em CSS, o atributo <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/display#display_contents\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">display: contents</code></a> pode ser usado se você não quer que o elemento faça parte do <em>layout</em>.</p>\n</blockquote>\n<h3 id=\"detecting-unexpected-side-effects\"><a href=\"#detecting-unexpected-side-effects\" 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>Detectar efeitos colaterais (side effects) inesperados </h3>\n<p>Conceptualmente, o React funciona em duas fases:</p>\n<ul>\n<li>A <strong>fase de renderização</strong> determina quais mudanças precisam ser feitas para, por exemplo, o DOM. Durante essa fase, o React chama <code class=\"gatsby-code-text\">render</code> e compara o resultado com a renderização anterior.</li>\n<li>A <strong>fase de <em>commit</em></strong> é quando o React aplica qualquer mudança. (No caso do React DOM, isso é quando o React insere, atualiza ou remove nós do DOM.) O React também chama métodos de ciclo de vida como <code class=\"gatsby-code-text\">componentDidMount</code> e <code class=\"gatsby-code-text\">componentDidUpdate</code> durante essa fase.</li>\n</ul>\n<p>A fase de <em>commit</em> é geralmente muito rápida, mas a renderização pode ser devagar. Por essa razão, o futuro <code class=\"gatsby-code-text\">modo concorrente</code> (que ainda não é habilitado por padrão) quebra a renderização em pedaços, pauzando e resumindo o trabalho para evitar bloquear o navegador. Isso significa que o React pode invocar ciclos de vida da fase de renderização mais de uma vez antes de <em>commitar</em>, ou pode ainda invocá-los sem nem <em>commitar</em> (dado um eventual erro ou uma interrupção de maior prioridade).</p>\n<p>Os ciclos de vida da fase da renderização incluem os seguintes métodos do componente classe:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">constructor</code></li>\n<li><code class=\"gatsby-code-text\">componentWillMount</code> (ou <code class=\"gatsby-code-text\">UNSAFE_componentWillMount</code>)</li>\n<li><code class=\"gatsby-code-text\">componentWillReceiveProps</code> (ou <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps</code>)</li>\n<li><code class=\"gatsby-code-text\">componentWillUpdate</code> (ou <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate</code>)</li>\n<li><code class=\"gatsby-code-text\">getDerivedStateFromProps</code></li>\n<li><code class=\"gatsby-code-text\">shouldComponentUpdate</code></li>\n<li><code class=\"gatsby-code-text\">render</code></li>\n<li><code class=\"gatsby-code-text\">setState</code> funções atualizadoras (o primeiro argumento)</li>\n</ul>\n<p>Já que os métodos acima podem ser chamados mais de uma vez, é importante que eles não contenham efeitos colaterais. Ignorar essa regra pode levar a uma variedade de problemas, incluindo vazamento de memória e estado inválido da aplicação. Infelizmente, pode ser difícil detectar esses problemas, já que eles podem ser <a href=\"https://en.wikipedia.org/wiki/Deterministic_algorithm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">não determinísticos</a>.</p>\n<p>O modo estrito não pode detectar automaticamente efeitos colaterais para você, mas pode ajudá-lo a achá-los ao torná-los um pouco mais determinísticos. Isso é feito ao invocar duas vezes seguidas as seguintes funções:</p>\n<ul>\n<li>Os métodos <code class=\"gatsby-code-text\">constructor</code>, <code class=\"gatsby-code-text\">render</code> e <code class=\"gatsby-code-text\">shouldComponentUpdate</code> de componentes classe</li>\n<li>O método estático <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> de componentes classe</li>\n<li>Corpo de componentes de função</li>\n<li>Funções do atualizador de estado (o primeiro argumento para <code class=\"gatsby-code-text\">setState</code>)</li>\n<li>Funções passadas para <code class=\"gatsby-code-text\">useState</code>, <code class=\"gatsby-code-text\">useMemo</code> ou <code class=\"gatsby-code-text\">useReducer</code></li>\n</ul>\n<blockquote>\n<p>Nota:</p>\n<p>Isso só se aplica em modo de desenvolvimento. <em>Ciclos de vida não serão invocados duas vezes em produção.</em></p>\n</blockquote>\n<p>Por exemplo, considere o seguinte código:\n<div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">TopLevelRoute</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</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 keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    SharedApplicationState<span class=\"token punctuation\">.</span><span class=\"token function\">recordEvent</span><span class=\"token punctuation\">(</span><span class=\"token string\">'ExampleComponent'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n        </div></p>\n<p>À primeira vista, este código pode não parecer problemático. Mas se <code class=\"gatsby-code-text\">SharedApplicationState.recordEvent</code> não for <a href=\"https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">idempotente</a>, então instanciar este componente múltiplas vezes pode levar a um estado da aplicação inválido. Este tipo de erro pequeno e sutil pode não se manifestar durante o desenvolvimento, ou pode fazê-lo de forma inconsistente e, portanto, ser ignorado.</p>\n<p>Ao intencionalmente invocar os métodos de ciclo de vida duas vezes, como o construtor do componente, o modo estrito pode tornar padrões como este mais fácil de localizar.</p>\n<h3 id=\"detecting-legacy-context-api\"><a href=\"#detecting-legacy-context-api\" 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>Detectar o uso da antiga API de contexto (Context API) </h3>\n<p>A antiga API de contexto era propensa a erros, e será removida em uma futura versão principal (<em>major version</em>). Ela ainda funciona para todas versões <code class=\"gatsby-code-text\">16.x</code>, mas mostrará uma mensagem de aviso no modo estrito: </p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/fca5c5e1fb2ef2e2d59afb100b432c12/51800/warn-legacy-context-in-strict-mode.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 840px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 18.57142857142857%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAsklEQVQI1z2O226DMBBE+f8/axM3JGkL+AakkEixcUxfK2aybqVKR0c7LztT/eiGR4X3muqFpzfWe1jNwdEbOk0nNhg8ppFjD9uxt5wuWLNQId6hm023YnyeYdptidsjbakYhQXpF7nzozhFxIAlVPSWX0P5d5s5Txw8Lz2lYex5ndE18BbewGlIs2DaEmWL01U8qHSqxUHtlo9zqlU87IN6DV2zXmd+r38LCzmX5v+45iddvdtOYuXXpwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"warn legacy context in strict mode\"\n        title=\"\"\n        src=\"/static/fca5c5e1fb2ef2e2d59afb100b432c12/1e088/warn-legacy-context-in-strict-mode.png\"\n        srcset=\"/static/fca5c5e1fb2ef2e2d59afb100b432c12/65ed1/warn-legacy-context-in-strict-mode.png 210w,\n/static/fca5c5e1fb2ef2e2d59afb100b432c12/d10fb/warn-legacy-context-in-strict-mode.png 420w,\n/static/fca5c5e1fb2ef2e2d59afb100b432c12/1e088/warn-legacy-context-in-strict-mode.png 840w,\n/static/fca5c5e1fb2ef2e2d59afb100b432c12/51800/warn-legacy-context-in-strict-mode.png 1196w\"\n        sizes=\"(max-width: 840px) 100vw, 840px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<p>Leia a <a href=\"/docs/context.html\">documentação da nova API de contexto</a> para ajudá-lo a migrar para a nova versão.</p>","frontmatter":{"title":"Modo Estrito (Strict Mode)","next":null,"prev":null},"fields":{"path":"content/docs/strict-mode.md","slug":"docs/strict-mode.html"}}},"pageContext":{"slug":"docs/strict-mode.html"}},"staticQueryHashes":[]}