{"id":49249,"date":"2022-05-10T04:05:55","date_gmt":"2022-05-10T07:05:55","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=49249&#038;preview=true&#038;preview_id=49249"},"modified":"2023-08-22T03:33:54","modified_gmt":"2023-08-22T06:33:54","slug":"usecallback-react","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/","title":{"rendered":"Como Usar o Hook useCallback do React"},"content":{"rendered":"<p>N\u00e3o \u00e9 segredo que o <a href=\"https:\/\/kinsta.com\/pt\/blog\/ferramentas-de-desenvolvimento-web\/#27-reactjs\">React.js tem se tornado amplamente popular<\/a> nos \u00faltimos anos. \u00c9 agora a <a href=\"https:\/\/kinsta.com\/pt\/blog\/bibliotecas-javascript\/#reactjs\">biblioteca JavaScript de escolha<\/a> para muitos dos jogadores mais proeminentes da internet, incluindo o Facebook e o WhatsApp.<\/p>\n<p>Uma das principais raz\u00f5es para sua ascens\u00e3o foi a introdu\u00e7\u00e3o de hooks na <a href=\"https:\/\/github.com\/facebook\/react\/blob\/main\/CHANGELOG.md#1680-february-6-2019\" target=\"_blank\" rel=\"noopener noreferrer\">vers\u00e3o 16.8<\/a>. Os hooks do React permitem que voc\u00ea utilize a funcionalidade React sem escrever componentes de classe. Agora os componentes funcionais com hooks se tornaram a estrutura de go-to-work dos desenvolvedores para trabalhar com o React.<\/p>\n<p>Neste artigo do blog, vamos nos aprofundar em um hook espec\u00edfico &#8211; <code>useCallback<\/code> &#8211; porque ele toca em uma parte fundamental da programa\u00e7\u00e3o funcional conhecida como memoization. Voc\u00ea saber\u00e1 exatamente como e quando utilizar o hook <code>useCallback<\/code> e fazer o melhor de suas capacidades de melhoria de desempenho.<\/p>\n<p>Pronto? Vamos mergulhar!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que \u00e9 Memoization?<\/h2>\n<p>Memoization \u00e9 quando uma fun\u00e7\u00e3o complexa armazena sua sa\u00edda para que na pr\u00f3xima vez seja chamada com a mesma entrada. \u00c9 <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-cache\/\">semelhante ao cache<\/a>, mas em um n\u00edvel mais local. Ela pode pular qualquer c\u00e1lculo complexo e retornar a sa\u00edda mais rapidamente, como j\u00e1 est\u00e1 calculado.<\/p>\n<p>Isso pode ter um efeito significativo na aloca\u00e7\u00e3o e desempenho da mem\u00f3ria, e essa tens\u00e3o \u00e9 o que hook <code>useCallback<\/code> pretende aliviar.<\/p>\n<h3>useCallback vs usarMemo<\/h3>\n<p>Neste ponto, vale a pena mencionar que <code>useCallback<\/code> se emparelha bem com outro hook chamado <code>useMemo<\/code>. Vamos discutir os dois, mas nesta pe\u00e7a, vamos focar em <code>useCallback<\/code> como o t\u00f3pico principal.<\/p>\n<p>A diferen\u00e7a chave \u00e9 que <code>useMemo<\/code> retorna um valor memorizado, enquanto <code>useCallback<\/code> retorna uma fun\u00e7\u00e3o memorizada. Isso significa que <code>useMemo<\/code> \u00e9 usado para armazenar um valor computado, enquanto <code>useCallback<\/code> retorna uma fun\u00e7\u00e3o que voc\u00ea pode chamar mais tarde.<\/p>\n<p>Estes hooks lhe devolver\u00e3o uma vers\u00e3o em cache a menos que uma de suas depend\u00eancias (por exemplo, estado ou adere\u00e7os) mude.<\/p>\n<p>Vamos dar uma olhada nas duas fun\u00e7\u00f5es em a\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-javascript\">import { useMemo, useCallback } from 'react'\nconst values = [3, 9, 6, 4, 2, 1]\n\n\/\/ This will always return the same value, a sorted array. Once the values array changes then this will recompute.\nconst memoizedValue = useMemo(() =&gt; values.sort(), [values])\n\n\/\/ This will give me back a function that can be called later on. It will always return the same result unless the values array is modified.\nconst memoizedFunction = useCallback(() =&gt; values.sort(), [values])<\/code><\/pre>\n<p>O trecho de c\u00f3digo acima \u00e9 um exemplo elaborado, mas mostra a diferen\u00e7a entre os dois callbacks:<\/p>\n<ol>\n<li><code>memoizedValue<\/code> se tornar\u00e1 a matriz <code>[1, 2, 3, 4, 6, 9]<\/code>. Enquanto a vari\u00e1vel de valores permanecer, o mesmo acontecer\u00e1 com <code>memoizedValue<\/code>, e ela nunca mais ser\u00e1 recalculada.<\/li>\n<li><code>memoizedFunction<\/code> ser\u00e1 uma fun\u00e7\u00e3o que retornar\u00e1 o array <code>[1, 2, 3, 4, 6, 9]<\/code>.<\/li>\n<\/ol>\n<p>O que \u00e9 \u00f3timo nessas duas liga\u00e7\u00f5es \u00e9 que elas ficam em cache e ficam penduradas at\u00e9 que a matriz de depend\u00eancia mude. Isto significa que em um renderizador, eles n\u00e3o receber\u00e3o lixo coletado.<\/p>\n\n<h2 id=\"rendering-e-react\" class=\"has-anchor-hash\">Rendering e React<\/h2>\n<p>Por que a memoriza\u00e7\u00e3o \u00e9 importante quando se trata do React?<\/p>\n<p>Tem a ver com a forma como o React torna seus componentes. React usa um DOM Virtual armazenado na mem\u00f3ria para comparar dados e decidir o que atualizar.<\/p>\n<p>O DOM virtual ajuda o React com desempenho e mant\u00e9m sua aplica\u00e7\u00e3o r\u00e1pida. Por padr\u00e3o, se algum valor em seu componente mudar, o componente inteiro ser\u00e1 renderizado novamente. Isso torna o React &#8220;reativo&#8221; \u00e0 entrada do usu\u00e1rio e permite que a tela seja atualizada sem recarregar a p\u00e1gina.<\/p>\n<p>Voc\u00ea n\u00e3o quer renderizar o seu componente porque as mudan\u00e7as n\u00e3o afetar\u00e3o esse componente. Aqui \u00e9 onde a memoriza\u00e7\u00e3o atrav\u00e9s de <code>useCallback<\/code> e <code>useMemo<\/code> vem a calhar.<\/p>\n<p>Quando o React religa o seu componente, ele tamb\u00e9m recria as fun\u00e7\u00f5es que voc\u00ea declarou dentro do seu componente.<\/p>\n<p>Note que ao comparar a igualdade de uma fun\u00e7\u00e3o com outra fun\u00e7\u00e3o, elas sempre ser\u00e3o falsas. Como uma fun\u00e7\u00e3o tamb\u00e9m \u00e9 um objeto, ela s\u00f3 ser\u00e1 igual a si mesma:<\/p>\n<pre><code class=\"language-javascript\">\/\/ these variables contain the exact same function but they are not equal\nconst hello = () =&gt; console.log('Hello Matt')\nconst hello2 = () =&gt; console.log('Hello Matt')\n\nhello === hello2 \/\/ false\nhello === hello \/\/ true<\/code><\/pre>\n<p>Em outras palavras, quando o React re-entrega seu componente, ele ver\u00e1 quaisquer fun\u00e7\u00f5es que s\u00e3o declaradas em seu componente como sendo novas fun\u00e7\u00f5es.<\/p>\n<p>Isto \u00e9 bom na maioria das vezes, e fun\u00e7\u00f5es simples s\u00e3o f\u00e1ceis de computar e n\u00e3o ter\u00e3o impacto no desempenho. Mas as outras vezes quando voc\u00ea n\u00e3o quer que a fun\u00e7\u00e3o seja vista como uma nova fun\u00e7\u00e3o, voc\u00ea pode confiar em <code>useCallback<\/code> para ajud\u00e1-lo.<\/p>\n<p>Voc\u00ea pode estar pensando: &#8220;Quando eu n\u00e3o gostaria que uma fun\u00e7\u00e3o fosse vista como uma nova fun\u00e7\u00e3o? Bem, h\u00e1 certos casos em que <code>useCallback<\/code> faz mais sentido:<\/p>\n<ol>\n<li>Voc\u00ea est\u00e1 passando a fun\u00e7\u00e3o para outro componente que tamb\u00e9m \u00e9 memorizado (<code>useMemo<\/code>)<\/li>\n<li>Sua fun\u00e7\u00e3o tem um estado interno que precisa ser lembrado<\/li>\n<li>Sua fun\u00e7\u00e3o \u00e9 uma depend\u00eancia de outro hook, como <code>useEffect<\/code> por exemplo<\/li>\n<\/ol>\n<h2>Benef\u00edcios de performance do useCallback<\/h2>\n<p>Quando <code>useCallback<\/code> \u00e9 usado apropriadamente, ele pode ajudar a acelerar o seu aplicativo e evitar que os componentes voltem a renderizar se eles n\u00e3o precisarem.<\/p>\n<p>Suponha, por exemplo, que voc\u00ea tem um componente que recupera uma grande quantidade de dados e \u00e9 respons\u00e1vel por exibir esses dados na forma de um <a href=\"https:\/\/kinsta.com\/blog\/wordpress-charts\/\">gr\u00e1fico ou diagrama<\/a>, como este aqui:<\/p>\n<figure>\n<p><figure id=\"attachment_110702\" aria-describedby=\"caption-attachment-110702\" style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-110702 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/12\/react-bar-graph.png\" alt=\"Gr\u00e1fico de barras gerado usando um componente React\" width=\"1600\" height=\"546\"><figcaption id=\"caption-attachment-110702\" class=\"wp-caption-text\">Gr\u00e1fico de barras gerado usando um componente React<\/figcaption><\/figure><\/figure>\n<p>Suponha que o componente principal para a sua visualiza\u00e7\u00e3o de dados seja o componente que voc\u00ea reapresenta, mas os adere\u00e7os ou estado alterados n\u00e3o afetam esse componente. Nesse caso, voc\u00ea provavelmente n\u00e3o quer ou precisa renderiz\u00e1-lo e recuperar todos os dados. Evitar esta renderiza\u00e7\u00e3o e a restaura\u00e7\u00e3o pode economizar a largura de banda do seu usu\u00e1rio e proporcionar uma experi\u00eancia mais suave para o usu\u00e1rio.<\/p>\n<h2>Desvantagens do useCallback<\/h2>\n<p>Embora este hook possa ajud\u00e1-lo a melhorar seu desempenho, ele tamb\u00e9m vem com suas armadilhas. Algumas coisas a considerar antes de usar <code>useCallback<\/code> (e <code>useMemo<\/code>) s\u00e3o:<\/p>\n<ul>\n<li><strong>Garbage collection:<\/strong> As outras fun\u00e7\u00f5es que ainda n\u00e3o est\u00e3o memorizadas ser\u00e3o jogadas fora pelo React para liberar a mem\u00f3ria.<\/li>\n<li><strong>Aloca\u00e7\u00e3o de mem\u00f3ria:<\/strong> Similar \u00e0 coleta de lixo, quanto mais fun\u00e7\u00f5es memotizadas voc\u00ea tiver, mais mem\u00f3ria ser\u00e1 necess\u00e1ria. Al\u00e9m disso, cada vez que voc\u00ea usar essas chamadas, h\u00e1 um monte de c\u00f3digo dentro do React que precisa usar ainda mais mem\u00f3ria para lhe fornecer a sa\u00edda em cache.<\/li>\n<li><strong>Complexidade do c\u00f3digo:<\/strong> Quando voc\u00ea come\u00e7a a envolver fun\u00e7\u00f5es nestes <a href=\"https:\/\/kinsta.com\/pt\/blog\/hooks-wordpress\/\">hooks<\/a>, voc\u00ea imediatamente aumenta a complexidade do seu c\u00f3digo. Agora \u00e9 necess\u00e1rio entender melhor porque estes hooks est\u00e3o sendo usados e confirmar que eles s\u00e3o usados corretamente.<\/li>\n<\/ul>\n<p>Estar ciente das armadilhas acima pode poupar a voc\u00ea mesmo a dor de cabe\u00e7a de trope\u00e7ar nelas. Ao considerar empregar o\u00a0<code>useCallback<\/code>, tenha certeza de que os benef\u00edcios de desempenho superar\u00e3o os inconvenientes.<\/p>\n<h2>Exemplo de React useCallback<\/h2>\n<p>Abaixo est\u00e1 uma configura\u00e7\u00e3o simples com um componente de Button e um componente de Counter. O Counter tem duas partes de estado e apresenta dois componentes de Button\u00a0, cada um que atualizar\u00e1 uma parte separada do estado dos componentes do Counter.<\/p>\n<p>O componente Button recebe dois adere\u00e7os: <code>handleClick<\/code> e name. Cada vez que o Bot\u00e3o for renderizado, ele ir\u00e1 <a href=\"https:\/\/kinsta.com\/pt\/blog\/ferramenta-inspecionar\/#touring-the-inspect-element-panel\">se conectar ao console<\/a>.<\/p>\n<pre><code class=\"language-javascript\">import { useCallback, useState } from 'react'\n\nconst Button = ({handleClick, name}) =&gt; {\n  console.log(`${name} rendered`)\n  return &lt;button onClick={handleClick}&gt;{name}&lt;\/button&gt;\n}\n\nconst Counter = () =&gt; {\n\nconsole.log('counter rendered')\n  const [countOne, setCountOne] = useState(0)\n  const [countTwo, setCountTwo] = useState(0)\n  return (\n    &lt;&gt;\n      {countOne} {countTwo}\n      &lt;Button handleClick={() =&gt; setCountOne(countOne + 1)} name=\"button1\" \/&gt;\n      &lt;Button handleClick={() =&gt; setCountTwo(countTwo + 1)} name=\"button1\" \/&gt;\n    &lt;\/&gt;\n  )\n}<\/code><\/pre>\n<p>Neste exemplo, sempre que voc\u00ea clicar em um dos bot\u00f5es, voc\u00ea ver\u00e1 isso no console:<\/p>\n<pre><code class=\"language-javascript\">\/\/ counter rendered\n\n\/\/ button1 rendered\n\/\/ button2 rendered<\/code><\/pre>\n<p>Agora, se aplicarmos <code>useCallback<\/code> \u00e0s nossas fun\u00e7\u00f5es <code>handleClick<\/code> e embrulharmos nosso Bot\u00e3o em <code>React.memo<\/code>, podemos ver o que <code>useCallback<\/code> nos fornece. <code>React.memo<\/code> \u00e9 similar a <code>useMemo<\/code> e nos permite memorizar um componente.<\/p>\n<pre><code class=\"language-javascript\">import { useCallback, useState } from 'react'\n\nconst Button = React.memo(({handleClick, name}) =&gt; {\n  console.log(`${name} rendered`)\n  return &lt;button onClick={handleClick}&gt;{name}&lt;\/button&gt;\n})\n\nconst Counter = () =&gt; {\n  console.log('counter rendered')\n  const [countOne, setCountOne] = useState(0)\n  const [countTwo, setCountTwo] = useState(0)\n  const memoizedSetCountOne = useCallback(() =&gt; setCountOne(countOne + 1), [countOne)\n  const memoizedSetCountTwo = useCallback(() =&gt; setCountTwo(countTwo + 1), [countTwo])\n  return (\n    &lt;&gt;\n        {countOne} {countTwo}\n        &lt;Button handleClick={memoizedSetCountOne} name=\"button1\" \/&gt;\n        &lt;Button handleClick={memoizedSetCountTwo} name=\"button1\" \/&gt;\n    &lt;\/&gt;\n  )\n}<\/code><\/pre>\n<p>Agora, quando clicarmos em qualquer um dos bot\u00f5es, veremos apenas o bot\u00e3o que clicamos para entrar no console:<\/p>\n<pre><code class=\"language-javascript\">\/\/ counter rendered\n\n\/\/ button1 rendered\n\n\/\/ counter rendered\n\n\/\/ button2 rendered<\/code><\/pre>\n<p>N\u00f3s aplicamos a memoriza\u00e7\u00e3o ao nosso componente Button, e os valores de adere\u00e7o que s\u00e3o passados a ele s\u00e3o vistos como iguais. As duas fun\u00e7\u00f5es <code>handleClick<\/code> est\u00e3o em cache e ser\u00e3o vistas como a mesma fun\u00e7\u00e3o do React at\u00e9 que o valor de um item na matriz de depend\u00eancia mude (por exemplo <code>countOne<\/code>, <code>countTwo<\/code>).<\/p>\n\n<h2>Resumo<\/h2>\n<p>Por mais legais que sejam <code>useCallback<\/code> e <code>useMemo<\/code>, lembre-se que eles t\u00eam casos de uso espec\u00edfico &#8211; voc\u00ea n\u00e3o deve estar envolvendo todas as fun\u00e7\u00f5es com estes hooks. Se a fun\u00e7\u00e3o for computacionalmente complexa, uma depend\u00eancia de outro hook ou um adere\u00e7o passado para um componente memorizado s\u00e3o bons indicadores que voc\u00ea pode querer alcan\u00e7ar para <code>useCallback<\/code>.<\/p>\n<p>Esperamos que este artigo o tenha ajudado a entender esta avan\u00e7ada funcionalidade React e ajudado a ganhar mais confian\u00e7a com a programa\u00e7\u00e3o funcional ao longo do caminho!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e3o \u00e9 segredo que o React.js tem se tornado amplamente popular nos \u00faltimos anos. \u00c9 agora a biblioteca JavaScript de escolha para muitos dos jogadores mais &#8230;<\/p>\n","protected":false},"author":239,"featured_media":49509,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[523,460,710,575,44],"topic":[977,1002],"class_list":["post-49249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-javascript","tag-javascript-frameworks","tag-react","tag-react-js","tag-webdev","topic-frameworks-javascript","topic-react"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como Usar o Hook useCallback do React<\/title>\n<meta name=\"description\" content=\"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Usar o Hook useCallback do React\" \/>\n<meta property=\"og:description\" content=\"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-10T07:05:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T06:33:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Sobieray\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Sobieray\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\"},\"author\":{\"name\":\"Matthew Sobieray\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/57ce045b15378b47c67292ce76cc3694\"},\"headline\":\"Como Usar o Hook useCallback do React\",\"datePublished\":\"2022-05-10T07:05:55+00:00\",\"dateModified\":\"2023-08-22T06:33:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\"},\"wordCount\":1429,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\",\"keywords\":[\"JavaScript\",\"JavaScript Frameworks\",\"React\",\"React.js\",\"webdev\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\",\"name\":\"Como Usar o Hook useCallback do React\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\",\"datePublished\":\"2022-05-10T07:05:55+00:00\",\"dateModified\":\"2023-08-22T06:33:54+00:00\",\"description\":\"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Como Usar o Hook useCallback do React\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frameworks JavaScript\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/frameworks-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Usar o Hook useCallback do React\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/57ce045b15378b47c67292ce76cc3694\",\"name\":\"Matthew Sobieray\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d0b3b5a416553d2677fc2882afcc9d16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d0b3b5a416553d2677fc2882afcc9d16?s=96&d=mm&r=g\",\"caption\":\"Matthew Sobieray\"},\"description\":\"Matthew works for Kinsta as a Development Team Lead from his home office in Denver, Colorado. He loves to learn, especially when it comes to web development.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/mattsobieray\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Usar o Hook useCallback do React","description":"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Usar o Hook useCallback do React","og_description":"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.","og_url":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-05-10T07:05:55+00:00","article_modified_time":"2023-08-22T06:33:54+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","type":"image\/jpeg"}],"author":"Matthew Sobieray","twitter_card":"summary_large_image","twitter_description":"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Matthew Sobieray","Tempo estimado de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/"},"author":{"name":"Matthew Sobieray","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/57ce045b15378b47c67292ce76cc3694"},"headline":"Como Usar o Hook useCallback do React","datePublished":"2022-05-10T07:05:55+00:00","dateModified":"2023-08-22T06:33:54+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/"},"wordCount":1429,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","keywords":["JavaScript","JavaScript Frameworks","React","React.js","webdev"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/","url":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/","name":"Como Usar o Hook useCallback do React","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","datePublished":"2022-05-10T07:05:55+00:00","dateModified":"2023-08-22T06:33:54+00:00","description":"Quer saber como o React lida com a memoriza\u00e7\u00e3o? Nivele suas habilidades do React aprendendo como aproveitar o hook useCallback para evitar a renderiza\u00e7\u00e3o.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/05\/usecallback-react.jpeg","width":1460,"height":730,"caption":"Como Usar o Hook useCallback do React"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/usecallback-react\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Frameworks JavaScript","item":"https:\/\/kinsta.com\/pt\/topicos\/frameworks-javascript\/"},{"@type":"ListItem","position":3,"name":"Como Usar o Hook useCallback do React"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/57ce045b15378b47c67292ce76cc3694","name":"Matthew Sobieray","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d0b3b5a416553d2677fc2882afcc9d16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d0b3b5a416553d2677fc2882afcc9d16?s=96&d=mm&r=g","caption":"Matthew Sobieray"},"description":"Matthew works for Kinsta as a Development Team Lead from his home office in Denver, Colorado. He loves to learn, especially when it comes to web development.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/mattsobieray\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/49249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/239"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=49249"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/49249\/revisions"}],"predecessor-version":[{"id":49522,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/49249\/revisions\/49522"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/49249\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/49509"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=49249"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=49249"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=49249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}