<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas Rosa</title>
    <description>The latest articles on DEV Community by Lucas Rosa (@bluniz).</description>
    <link>https://dev.to/bluniz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1029431%2Ffc937d70-48cc-40c7-8990-99246cdc0a4e.jpeg</url>
      <title>DEV Community: Lucas Rosa</title>
      <link>https://dev.to/bluniz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bluniz"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Lucas Rosa</dc:creator>
      <pubDate>Tue, 18 Mar 2025 21:58:37 +0000</pubDate>
      <link>https://dev.to/bluniz/-31pa</link>
      <guid>https://dev.to/bluniz/-31pa</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/raphacmartin" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1045060%2F23ec5210-3234-46e5-bfb9-6eeb77c9ed76.jpeg" alt="raphacmartin"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/raphacmartin/dont-panic-what-apples-ios-18-sdk-update-really-means-for-your-app-5cj2" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Don't Panic: What Apple's iOS 18 SDK Update Really Means for Your App!&lt;/h2&gt;
      &lt;h3&gt;Raphael Martin ・ Mar 7&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ios&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#xcode&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#appstore&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cicd&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ios</category>
      <category>xcode</category>
      <category>appstore</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Uma outra forma de reiniciar estados no React</title>
      <dc:creator>Lucas Rosa</dc:creator>
      <pubDate>Mon, 24 Apr 2023 13:01:13 +0000</pubDate>
      <link>https://dev.to/bluniz/uma-outra-forma-de-reiniciar-estados-no-react-2eod</link>
      <guid>https://dev.to/bluniz/uma-outra-forma-de-reiniciar-estados-no-react-2eod</guid>
      <description>&lt;p&gt;No desenvolvimento de aplicações utilizando o React, frequentemente encontramos situações em que precisamos reiniciar e/ou limpar os estados de alguns componentes. &lt;br&gt;
Normalmente utiliza-se varias estratégias, tais como adicionar novos valores aos estados. Neste artigo veremos como utilizar a propriedade &lt;code&gt;key&lt;/code&gt;para fazer isto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uma pequena contextualização
&lt;/h2&gt;

&lt;p&gt;A propriedade &lt;code&gt;key&lt;/code&gt;é utilizada pelo React para criar uma relação entre o nosso componente e o elemento na DOM. Ou seja, nada mais que um identificador que ajuda o React a fazer as atualizações corretas sendo um dos motivos de serem obrigatórios no uso de listas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problema
&lt;/h2&gt;

&lt;p&gt;Para isso vamos utilizar como exemplo uma lista de produtos que quando clicar no botão &lt;code&gt;ver&lt;/code&gt; , deve mostrar os dados detalhados do produto, incluindo suas avaliações.&lt;br&gt;
Vamos supor a seguinte situação, você decide deixar uma nova avaliação para o produto e começa a digitar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PUyeRV8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l8o0zr9tmcx3j30tsj2i.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PUyeRV8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l8o0zr9tmcx3j30tsj2i.gif" alt="Demonstração da aplicação desenvolvida" width="638" height="317"&gt;&lt;/a&gt;&lt;br&gt;
Porém, no meio do caminho tu decide ver as informações de outro produto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MoKmG61e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ml2p9e7t6qyu3aad2hq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MoKmG61e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ml2p9e7t6qyu3aad2hq.png" alt="Novo passo na pesquisa por produtos" width="478" height="683"&gt;&lt;/a&gt;&lt;br&gt;
Então percebe que o comentário que tu estava escrevendo para o outro produto ainda está ali, quando não deveria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que isso ocorre?
&lt;/h2&gt;

&lt;p&gt;Certo, agora que você entendeu o problema, vamos ao codigo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kxviXN8u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g505j5q3nuj81ophjkhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kxviXN8u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g505j5q3nuj81ophjkhv.png" alt="Código da ProductPage" width="800" height="903"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Bluniz/reset-states-react/blob/master/src/ProfilePage.jsx"&gt;Código do componente&lt;/a&gt;&lt;br&gt;
Este é o código da nossa página de produto, vamos entender o que está acontecendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temos dois estados

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;productID&lt;/code&gt;que será o valor responsável para pegarmos os dados detalhados de um produto.&lt;/li&gt;
&lt;li&gt;E a &lt;code&gt;productList&lt;/code&gt;que será o valor responsável por guardar nossa lista de produtos que aparecerá em tela.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Ao renderizar em tela o componente, o &lt;code&gt;useEffect&lt;/code&gt;será executado e faremos uma requisição para nosso servidor, então em caso de sucesso guardaremos as informações da lista de produtos no estado &lt;code&gt;productList&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enquanto não existir um valor na &lt;code&gt;productList&lt;/code&gt;, deverá aparecer em tela uma mensagem de “loading…”&lt;/li&gt;
&lt;li&gt;Quando existir um valor na &lt;code&gt;productList&lt;/code&gt;, iremos mostrar em tela nossa listagem.&lt;/li&gt;
&lt;li&gt;Quando clicarmos no botão ver de cada produto, adicionaremos seu respectivo ID no estado &lt;code&gt;productId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;E quando um &lt;code&gt;productId&lt;/code&gt;existir/for selecionado, deveremos mostrar em tela o componente &lt;code&gt;ProductInfo&lt;/code&gt;que é responsável por pegar os dados detalhados de um produto especifico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pronto, agora vamos ao código do &lt;code&gt;ProductInfo&lt;/code&gt;!&lt;br&gt;
&lt;a href="https://github.com/Bluniz/reset-states-react/blob/master/src/ProductInfo.jsx"&gt;Código&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temos dois estados

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;productInfo&lt;/code&gt; que é responsável por guardar as informações de um produto para mostrarmos em tela.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;newAvaliation&lt;/code&gt;que é responsável por guardar o que nós digitamos na avaliação.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xPRaZVvX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4bau34dnsl1y16notbmi.png" alt="Estados" width="800" height="254"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Temos também duas funções com responsabilidades diferentes

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;getProductInfo&lt;/code&gt; é responsável por fazer uma requisição ao nosso servidor e em caso de sucesso adicionar as informações do produto ao nosso estado &lt;code&gt;productInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onSubmitNewAvaliation&lt;/code&gt; é responsável por enviar nossa nova avaliação para nosso servidor e em caso de sucesso, atualizar os dados das informações do produto.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fr6N2muY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/de8do3plue4enesgaowa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fr6N2muY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/de8do3plue4enesgaowa.png" alt="functions" width="800" height="860"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A seguir o &lt;code&gt;useEffect&lt;/code&gt;, no momento em que o componente aparecer em tela ele irá chamar a função &lt;code&gt;getProductInfo&lt;/code&gt; que trará as informações do produto para nós.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-j1u8TT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6zn3d7f51cm18w3lahf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-j1u8TT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6zn3d7f51cm18w3lahf.png" alt="useEffect" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Então, renderizamos as informações do produto, incluindo as avaliações e adicionamos um input para que você possa adicionar novas avaliações ao produto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B35GdlAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0mzepfm6gvk7m8iobpod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B35GdlAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0mzepfm6gvk7m8iobpod.png" alt="JSX" width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas Lucas, ainda não entendi. O que está causando este comportamento do texto da nova avaliação?&lt;br&gt;
Então, basicamente quando alteramos a propriedade &lt;code&gt;productId&lt;/code&gt; que o componente &lt;code&gt;ProductInfo&lt;/code&gt;recebe apenas os estados relacionados ao produto serão atualizados, pois o React entende que é o mesmo componente(presta bem atenção nesta frase) então atualiza apenas o necessário e os outros estados se mantem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Br5GK9Vm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8k250cp1ubmp8pbocin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Br5GK9Vm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8k250cp1ubmp8pbocin.png" alt="Ilustração do fluxo de dados do componente" width="523" height="363"&gt;&lt;/a&gt;&lt;br&gt;
Ótimo, agora que sabemos o porque, vamos para o **como **resolver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como resolver?
&lt;/h2&gt;

&lt;p&gt;Provavelmente uma das primeiras soluções que vem a mente é: &lt;em&gt;&lt;strong&gt;“Vou apenas adicionar um setState quando chamar os dados do produto para poder reiniciar o estado de nova avaliação”&lt;/strong&gt;&lt;/em&gt;, algo mais ou menos assim: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RSFSLwEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0kf17lerpuelt0mej296.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RSFSLwEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0kf17lerpuelt0mej296.png" alt="Exemplo da função seguindo a ideia acima" width="800" height="485"&gt;&lt;/a&gt;&lt;br&gt;
É uma forma mais “comum” de se usar e não estou dizendo que tem algum problema utilizar, mas pense no seguinte cenário: &lt;br&gt;
&lt;em&gt;&lt;strong&gt;”Tu tem pelo menos uns 5 a 6 estados que precisam ser reiniciados sempre que alguma propriedade mudar, então tu teria que adicionar um setState para cada um, limpando então os seus valores”&lt;/strong&gt;&lt;/em&gt;.&lt;br&gt;
Percebe que quanto maior nosso componente, mais inviável fica utilizar essa estratégia. &lt;/p&gt;

&lt;p&gt;Então, onde que entra a propriedade &lt;code&gt;key&lt;/code&gt;que falamos lá no inicio?&lt;br&gt;
Falamos que esta propriedade ajuda o React a fazer as atualizações corretas na nossa arvore(DOM), certo?&lt;br&gt;
Bom, vamos ao código!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E443ogu7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/toavr2u5ircwxoe2u9ny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E443ogu7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/toavr2u5ircwxoe2u9ny.png" alt="Exemplo utilizando a propriedade key" width="800" height="885"&gt;&lt;/a&gt;&lt;br&gt;
Vemos que a unica diferença no nosso codigo da &lt;code&gt;ProductPage&lt;/code&gt; é a propriedade key no componente &lt;code&gt;ProductInfo.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Vamos ver se realmente funciona?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ciBW2WK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n0qsp9xw9w9vc979z1v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ciBW2WK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n0qsp9xw9w9vc979z1v.gif" alt="Exemplo da aplicação rodando após a ultima alteração" width="638" height="317"&gt;&lt;/a&gt;&lt;br&gt;
Basicamente, a &lt;code&gt;key&lt;/code&gt;nada mais é que o identificador do componente na DOM. Ou seja, quando alteramos a &lt;code&gt;key&lt;/code&gt;, o React entende que ele é um novo componente. Portando ele inicia com seu estados iniciais. &lt;br&gt;
Essa abordagem é diferente pois no primeiro exemplo ainda é o mesmo componente apenas atualizando os estados. No segundo, a cada mudança de produto, é um novo componente.&lt;/p&gt;

&lt;p&gt;Bom, não existe certo ou errado mas sim diversas abordagens para lidar com um problema, cada uma se encaixa em determinado contexto.&lt;br&gt;
Se tu chegou até esse ponto do artigo, deve ter entendido que em alguns cenários temos o recurso da propriedade &lt;code&gt;key&lt;/code&gt;para lidar com reset de estados. E de fato é algo bem simples de se fazer.&lt;/p&gt;

&lt;p&gt;Se tu tiver qualquer duvida, sinta-se a vontade para perguntar😁.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algumas referencias
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key"&gt;Rendering Lists&lt;/a&gt;&lt;br&gt;
&lt;a href="https://react.dev/learn/you-might-not-need-an-effect#resetting-all-state-when-a-prop-changes"&gt;You Might Not Need an Effect&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Misc📜
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Bluniz"&gt;Meu Github&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/blunizdev"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Bluniz/reset-states-react"&gt;Repositório do código utilizado como exemplo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
