{"componentChunkName":"component---src-templates-blog-js","path":"/blog/2018/05/23/react-v-16-4.html","result":{"data":{"markdownRemark":{"html":"<p>A última release minor adicionou suporte para um recurso solicitado frequentemente: eventos de ponteiros!</p>\n<p>Também foi incluso uma correção de erro para o <code class=\"gatsby-code-text\">getDerivedStateFromProps</code>. Confira o <a href=\"#changelog\">changelog</a> completo abaixo.</p>\n<h2 id=\"pointer-events\"><a href=\"#pointer-events\" 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>Eventos de Ponteiros </h2>\n<p>Os tipos de eventos seguintes estão disponíveis agora no React DOM:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">onPointerDown</code></li>\n<li><code class=\"gatsby-code-text\">onPointerMove</code></li>\n<li><code class=\"gatsby-code-text\">onPointerUp</code></li>\n<li><code class=\"gatsby-code-text\">onPointerCancel</code></li>\n<li><code class=\"gatsby-code-text\">onGotPointerCapture</code></li>\n<li><code class=\"gatsby-code-text\">onLostPointerCapture</code></li>\n<li><code class=\"gatsby-code-text\">onPointerEnter</code></li>\n<li><code class=\"gatsby-code-text\">onPointerLeave</code></li>\n<li><code class=\"gatsby-code-text\">onPointerOver</code></li>\n<li><code class=\"gatsby-code-text\">onPointerOut</code></li>\n</ul>\n<p>Tenha em mente que estes eventos só funcionarão em navegadores que suportam a especificação de <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">eventos de ponteiros</a>. (No momento da redação deste texto, estão inclusas as versões mais recentes do Chrome, Firefox, Edge e Internet Explorer). Se a sua aplicação depende de eventos de ponteiros, recomendamos a utilização de um polyfill desenvolvido por terceiros. Optamos por não incluir tal polyfill no React DOM, para evitar o aumento de tamanho do pacote.</p>\n<p><a href=\"https://codesandbox.io/api/v1/sandboxes/define?parameters=N4IgZglgNgpgziAXKADgQwMYGs0HMYB0AVnAPYB2SoGFALjObVSACYwoNvkYTxUC-AGhABbNBEqIQARgBsAWgAs8gE4xYaODHkAjKKVzyUpOLQD0xifRXyYANwa04tgB5oRKWMQT8hICWwuBAAWtCJQzDSMjkggADwsEHYABBAsALwAOiAqpKS02QB8cWaJdoUgfnJKquowmtp6BkYm5pbRNvaOzjBuHl4kkXQxUhAepCq0yQBK9RhTYLkiyQDkapi0KwDcmeRjxpMzc7QAIgDyALLJi6TLa8fyLLfbu7tRpskAwgCS058AMgBRAD6AGVvgAtQHJdLJAAcAFYduQ3lBNHBkicVHgAEKkFzJXr0cgsDGzDYET63YzkRzJYC7ZLJUxoegw-mMpnJYKaT5oFC0ACuakQ1zQUC0gk5TJ4KgwsH-MDAtFFcIADFLyFzkrL5TAACqkFCqjWc_jIpkQOBYvC4CS4dlgcVaC3JFBqOwQUiCuCK5XstWu932L0-w0oAPIzkUE6kADuWthXUYMMKHK1XNowStBCtNtwdvIDthtBUgpgrqZydoBFoaBU-BrWloAAVSFYYCo-QLhTAABTVgjtazfFgASijGaZZjMyQA6jBmbQJous4uJBBaBBxTq8ipEuRWfBksvkjpF2g9KvSDrxRhBWi2WudTyi_BpckZ8lH53khQCB-WY5kS2LzG2cCbl65AnOodYDg4jATmak5MhQFykA47LVqm6bahAYDJH2ACEQFwLm1rYgW9pjrh2rJGoQoqOQlbJPwH7vFMwCwMqggnka_DsqRBAgRs4GQTGsFoPBjhISiU4ntmZHNqCdb0H2fbALqCpKrQvFaQa_E0ekaYaR-MoQHK2nKqK-l-lMADU346ZqdE6hZerhjZ7mwOGySOcuKAuVy_BjrJTLmq8GYUAAqhGSYIVMxmEUJeaUYWxZihKMBhX-5AAOL5N2jGLvFdJJUJymqf2wA8nARW9qKpbliFroUP8rT1WoWEJamgGKQQlVHhptWdTAopOllLWRVWLilqJJjidBkndWVaYMvJHFOf6pWMEOeAwAAGixm0BStu3oPgACax0UB8bBQHW7Lra53EqltUzyApObBp63q-s5Zl8caQPJJ9Qk_aGcDhkF4UseDHqQ3Z7KvXD_UQ39vklkaLEMcKWr3XWroRXJTJqCSnZ9jRz1cptNW8vyxV6d5MB2UzlkGSgAklv1LL0ChNO3VMOj4ipACesBPYDwv7p2oorNIKAEmQUBpMkADELAAJxa1rKww1yYgNhIcvSGqivJGqyQAExmy4euAyIEgABIwBAuChKKihqqa8lMnGaRZib3sAKT277boLVuFBy2oj5JDAYfasT7GC257NixLsLU9q_ssIHXy_ACILglC-tMsErvu29Px_ECYKQoCZdnhMbAqNMaCJD6oo10X9dQp-1tN8YEFR-QcuXsrgr0IndGvV57Os4DAXzx5RpNzomBYLguSCiSVL6CooojQzvbJAA_KsejlisyRy9vMAMDP2rLoKGDBAAgvMUFy-QFAJ_ryd5K4yYoRQGCQkhLnFjAdIwBhYuAzjAfghRAZMnAXYFBXJTBQJgfpBBbFw7agoG2DsKhYwJhgUJGM8ZyD4NcoQ8gxCOjoQcBQ_qaEMKIIwahBh7YOixVYTmGKnMuG5UYdYPk3B1ACLIkI2hdDuEFVbLw8RJ81DSIIBQRRo05HyLaq0MRnZRrqL0aYbRGCzDIPDiUMoljtQ5Xwfg3Y5J5jnAuAQMmrc-ycjiPmPEBILFBSePeEQjgCCNkBLAEJjAcSi1HH2NYeRNhjl2LJSovggA\" target=\"_blank\" rel=\"noreferrer\">Confira este exemplo em CodeSandbox.</a></p>\n<p>Enormes agradecimentos a <a href=\"https://github.com/philipp-spiess\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Philipp Spiess</a> por contribuir com esta mudança!</p>\n<h2 id=\"bugfix-for-getderivedstatefromprops\"><a href=\"#bugfix-for-getderivedstatefromprops\" 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>Correção de Erro para o <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> </h2>\n<p><code class=\"gatsby-code-text\">getDerivedStateFromProps</code> agora é chamado toda vez que um componente é renderizado, independentemente da causa da atualização. Anteriormente, isto era chamado se componente foi re-renderizado por seu pai, e não dispararia como resultado de um <code class=\"gatsby-code-text\">setState</code> local. Este foi um descuido na implementação inicial que agora foi corrigido. O comportamento anterior era mais semelhante ao <code class=\"gatsby-code-text\">componentWillReceiveProps</code>, mas o comportamento melhorado garante compatibilidade com o próximo modo de renderização assíncrono do React.</p>\n<p><strong>Esta correção de erro não afeta a maioria das aplicações</strong>, mas pode causar problemas com uma pequena fração de componentes. Os raros casos que importam se enquadram em uma das duas categorias: </p>\n<h3 id=\"1-avoid-side-effects-in-getderivedstatefromprops\"><a href=\"#1-avoid-side-effects-in-getderivedstatefromprops\" 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>1. Evite Efeitos Colaterais em <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> </h3>\n<p>Assim como o método render, <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> deve ser uma função pura de props e state. Efeitos colaterais em <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> nunca foram suportados, mas uma vez que agora é disparado com maior frequência do que costumava, a alteração recente pode expor erros não descobertos anteriormente.</p>\n<p>Código com efeito colateral deve ser movido para outros métodos: por exemplo, os despachos do Flux normalmente pertencem dentro do manipulador de eventos de origem, e as mutações manuais do DOM pertencem dentro de componentDidMount ou componentDidUpdate. Você pode ler mais sobre isso em nosso post recente sobre <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">preparando para renderização assíncrona</a>.</p>\n<h3 id=\"2-compare-incoming-props-to-previous-props-when-computing-controlled-values\"><a href=\"#2-compare-incoming-props-to-previous-props-when-computing-controlled-values\" 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>2. Comparar Props Recebidas com Props Anteriores ao Computar Valores Controlados </h3>\n<p>O código a seguir assume que <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> será executado somente em alterações de props:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromProps</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props<span class=\"token punctuation\">,</span> state</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">.</span>value <span class=\"token operator\">!==</span> state<span class=\"token punctuation\">.</span>controlledValue<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\">// Uma vez que este método é executado em ambas as alterações de props e state,</span>\n      <span class=\"token comment\">// updates locais no valor controlado serão ignorados, porque a versão de props</span>\n      <span class=\"token comment\">// sempre sobrescreve isto. Oops!</span>\n      controlledValue<span class=\"token operator\">:</span> props<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Uma maneira possível de corrigir isto é comparando o valor de recebido com o valor anterior por armazenar as props anteriores no estado:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromProps</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props<span class=\"token punctuation\">,</span> state</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> prevProps <span class=\"token operator\">=</span> state<span class=\"token punctuation\">.</span>prevProps <span class=\"token operator\">||</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// Comparando a prop recebida com a prop anterior</span>\n  <span class=\"token keyword\">const</span> controlledValue <span class=\"token operator\">=</span>\n    prevProps<span class=\"token punctuation\">.</span>value <span class=\"token operator\">!==</span> props<span class=\"token punctuation\">.</span>value\n      <span class=\"token operator\">?</span> props<span class=\"token punctuation\">.</span>value\n      <span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>controlledValue<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Armazena a prop anterior no state</span>\n    prevProps<span class=\"token operator\">:</span> props<span class=\"token punctuation\">,</span>\n    controlledValue<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>No entanto, <strong>código que “espelha” props no estado geralmente contém bugs</strong>, se você utiliza a mais recente <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> ou a legada <code class=\"gatsby-code-text\">componentWillReceiveProps</code>. Publicamos uma postagem no blog que explica esses problemas com mais detalhes e sugere <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">soluções mais simples que não envolvem <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code></a>.</p>\n<h2 id=\"installation\"><a href=\"#installation\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Installation </h2>\n<p>React v16.4.0 está disponível no registro npm.</p>\n<p>Para instalar o React 16 com Yarn, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> react@^16.4.0 react-dom@^16.4.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.4.0 react-dom@^16.4.0</code></pre></div>\n<p>Também fornecemos compilações UMD do React através de um 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 obter <a href=\"/docs/installation.html\">instruções de instalação detalhadas</a>.</p>\n<h2 id=\"changelog\"><a href=\"#changelog\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Changelog </h2>\n<h3 id=\"react\"><a href=\"#react\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React </h3>\n<ul>\n<li>Add a new <a href=\"https://github.com/reactjs/rfcs/pull/51\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">experimental</a> <code class=\"gatsby-code-text\">React.unstable_Profiler</code> component for measuring performance. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> in <a href=\"https://github.com/facebook/react/pull/12745\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12745</a>)</li>\n</ul>\n<h3 id=\"react-dom\"><a href=\"#react-dom\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React DOM </h3>\n<ul>\n<li>Adicionando suporte a especificação de eventos de ponteiros. (<a href=\"https://github.com/philipp-spiess\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@philipp-spiess</a> em <a href=\"https://github.com/facebook/react/pull/12507\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12507</a>)</li>\n<li>Chamando <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code> corretamente independente do motivo de re-renderização. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/12600\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12600</a> e <a href=\"https://github.com/facebook/react/pull/12802\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12802</a>)</li>\n<li>Correção de erro que impediu a propagação de contexto em alguns casos. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12708\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12708</a>)</li>\n<li>Correção da re-renderização de componentes utilizando <code class=\"gatsby-code-text\">forwardRef()</code> em um <code class=\"gatsby-code-text\">setState()</code> mais profundo. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12690\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12690</a>)</li>\n<li>Corrigindo alguns atributos sendo removidos incorretamente de nós de elemento personalizado. (<a href=\"https://github.com/airamrguez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@airamrguez</a> em <a href=\"https://github.com/facebook/react/pull/12702\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12702</a>)</li>\n<li>Corrigindo provedores de contexto para não salvar os filhos se há um provedor de contexto herdado acima. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12586\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12586</a>)</li>\n<li>Adicionando a capacidade de especificar <code class=\"gatsby-code-text\">propTypes</code> em um componente de provedor de contexto. (<a href=\"https://github.com/nicolevy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nicolevy</a> em <a href=\"https://github.com/facebook/react/pull/12658\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12658</a>)</li>\n<li>Corrigindo um aviso de falso positivo ao usar <code class=\"gatsby-code-text\">react-lifecycles-compat</code> em <code class=\"gatsby-code-text\">&lt;StrictMode&gt;</code>. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> em <a href=\"https://github.com/facebook/react/pull/12644\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12644</a>)</li>\n<li>Aviso quando a função de renderização <code class=\"gatsby-code-text\">forwardRef()</code> tiver <code class=\"gatsby-code-text\">propTypes</code> ou <code class=\"gatsby-code-text\">defaultProps</code>. (<a href=\"https://github.com/bvaughn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bvaughn</a> em <a href=\"https://github.com/facebook/react/pull/12644\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12644</a>)</li>\n<li>Melhorar como <code class=\"gatsby-code-text\">forwardRef()</code> e os consumidores de contexto são exibidos na pilha de componentes. (<a href=\"https://github.com/sophiebits\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sophiebits</a> em <a href=\"https://github.com/facebook/react/pull/12777\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12777</a>)</li>\n<li>Alterando nomes de eventos internos. Isso pode quebrar pacotes de terceiros que dependem dos internos do React de maneiras sem suporte. (<a href=\"https://github.com/philipp-spiess\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@philipp-spiess</a> em <a href=\"https://github.com/facebook/react/pull/12629\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12629</a>)</li>\n</ul>\n<h3 id=\"react-test-renderer\"><a href=\"#react-test-renderer\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React Test Renderer </h3>\n<ul>\n<li>Corrigindo o suporte de <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code> para corresponder ao novo comportamento do React DOM. (<a href=\"https://github.com/koba04\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@koba04</a> em <a href=\"https://github.com/facebook/react/pull/12676\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12676</a>)</li>\n<li>Corrigir uma falha de <code class=\"gatsby-code-text\">testInstance.parent</code> quando o pai é um fragmento ou outro nó especial. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12813\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12813</a>)</li>\n<li>Componentes <code class=\"gatsby-code-text\">forwardRef()</code> agora são detectáveis pelos métodos do renderizador traversal de teste. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12725\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12725</a>)</li>\n<li>O ReactShallowRenderer agora ignora os atualizadores de <code class=\"gatsby-code-text\">setState()</code> que retornam <code class=\"gatsby-code-text\">null</code> ou <code class=\"gatsby-code-text\">undefined</code>. (<a href=\"https://github.com/koba04\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@koba04</a> em <a href=\"https://github.com/facebook/react/pull/12756\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12756</a>)</li>\n</ul>\n<h3 id=\"react-art\"><a href=\"#react-art\" 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 ART </h3>\n<ul>\n<li>Corrigiingo o contexto de leitura fornecido a partir da árvore gerenciada pelo React DOM. (<a href=\"https://github.com/acdlite\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@acdlite</a> em <a href=\"https://github.com/facebook/react/pull/12779\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12779</a>)</li>\n</ul>\n<h3 id=\"react-call-return-experimental\"><a href=\"#react-call-return-experimental\" 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 Call Return (Experimental) </h3>\n<ul>\n<li>Este experimento foi excluído porque estava afetando o tamanho do pacote e a API não era suficientemente boa. É provável que volte no futuro de alguma outra forma. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12820\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12820</a>)</li>\n</ul>\n<h3 id=\"react-reconciler-experimental\"><a href=\"#react-reconciler-experimental\" 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 Reconciler (Experimental) </h3>\n<ul>\n<li>A <a href=\"https://github.com/facebook/react/blob/c601f7a64640290af85c9f0e33c78480656b46bc/packages/react-noop-renderer/src/createReactNoop.js#L82-L285\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">nova forma de configuração do host</a> é plana e não usa objetos aninhados. (<a href=\"https://github.com/gaearon\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gaearon</a> em <a href=\"https://github.com/facebook/react/pull/12792\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#12792</a>)</li>\n</ul>","excerpt":"A última release minor adicionou suporte para um recurso solicitado frequentemente: eventos de ponteiros! Também foi incluso uma correção de erro para o . Confira o changelog completo abaixo. Eventos de Ponteiros  Os tipos de eventos seguintes estão disponíveis agora no React DOM:           Tenha em mente que estes eventos só funcionarão em navegadores que suportam a especificação de eventos de ponteiros. (No momento da redação deste texto, estão inclusas as versões mais recentes do Chrome…","frontmatter":{"title":"React v16.4.0: Eventos de Ponteiros","next":null,"prev":null,"author":[{"frontmatter":{"name":"Andrew Clark","url":"https://twitter.com/acdlite"}}]},"fields":{"date":"23 de maio de 2018","path":"content/blog/2018-05-23-react-v-16-4.md","slug":"/blog/2018/05/23/react-v-16-4.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/05/23/react-v-16-4.html"}},"staticQueryHashes":[]}