<?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: Jonas Gabriel</title>
    <description>The latest articles on DEV Community by Jonas Gabriel (@jgalmeida93).</description>
    <link>https://dev.to/jgalmeida93</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%2F2696778%2F782fda37-daf6-4e20-a705-5a22e9739fb9.jpg</url>
      <title>DEV Community: Jonas Gabriel</title>
      <link>https://dev.to/jgalmeida93</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jgalmeida93"/>
    <language>en</language>
    <item>
      <title>Entendendo o Ciclo de Vida dos Componentes React</title>
      <dc:creator>Jonas Gabriel</dc:creator>
      <pubDate>Wed, 15 Jan 2025 13:00:34 +0000</pubDate>
      <link>https://dev.to/jgalmeida93/entendendo-o-ciclo-de-vida-dos-componentes-react-4ill</link>
      <guid>https://dev.to/jgalmeida93/entendendo-o-ciclo-de-vida-dos-componentes-react-4ill</guid>
      <description>&lt;p&gt;Imagine que você está construindo um modelo &lt;strong&gt;LEGO&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Primeiro, você junta as peças &lt;strong&gt;(inicialização)&lt;/strong&gt;, depois começa a montar &lt;strong&gt;(renderização)&lt;/strong&gt;, faz ajustes conforme necessário &lt;strong&gt;(atualização)&lt;/strong&gt; e, finalmente, se terminar ou mudar de modelo, desmonta tudo &lt;strong&gt;(desmontagem)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O ciclo de vida de um componente React funciona de forma semelhante!&lt;/p&gt;

&lt;h2&gt;
  
  
  O Ciclo de vida de um componente React
&lt;/h2&gt;

&lt;p&gt;Os componentes React passam por três fases principais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Montagem&lt;/strong&gt;: Quando o componente é criado e inserido no DOM pela primeira vez.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Atualização&lt;/strong&gt;: Quando as props ou o estado do componente mudam, ele é atualizado para refletir essas alterações.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desmontagem&lt;/strong&gt;: Quando um componente é removido do DOM.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vamos detalhar cada etapa:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Montagem: "Construindo o modelo LEGO"
&lt;/h2&gt;

&lt;p&gt;Quando um componente React é criado, as seguintes etapas acontecem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;constructor&lt;/strong&gt; (opcional): Configura o estado inicial e vincula manipuladores de eventos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;render()&lt;/strong&gt;: Descreve como a interface do usuário deve ser exibida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useEffect&lt;/strong&gt; (com array de dependências vazio): Executa após o componente ser montado, ideal para buscar dados ou se inscrever em serviços.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Welcome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bem-vindo ao React!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Simula a busca de dados iniciais&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;// Executa apenas uma vez ao montar&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Atualização: "Fazendo ajustes"
&lt;/h2&gt;

&lt;p&gt;Os componentes React são atualizados quando:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O estado muda&lt;/strong&gt;: Acionado por useState ou hooks similares.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As props mudam&lt;/strong&gt;: Quando novos dados são passados de um componente pai.&lt;/p&gt;

&lt;h3&gt;
  
  
  Para otimizar as atualizações:
&lt;/h3&gt;

&lt;p&gt;Use &lt;strong&gt;keys exclusivas&lt;/strong&gt; em listas para ajudar o React a atualizar o DOM de forma eficiente.&lt;/p&gt;

&lt;p&gt;Utilize hooks como &lt;strong&gt;useMemo&lt;/strong&gt; e &lt;strong&gt;useCallback&lt;/strong&gt; para evitar recálculos ou &lt;strong&gt;re-renderizações desnecessárias&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useMemo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;otherState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOtherState&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Função incrementada com useCallback para evitar recriação em cada renderização&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prevCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prevCount&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Valor memoizado para simular um cálculo pesado&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expensiveCalculation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useMemo&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Recalculando valor...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Contador&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Cálculo&lt;/span&gt; &lt;span class="nf"&gt;pesado &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;expensiveCalculation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Incrementar&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setOtherState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;otherState&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;Alterar&lt;/span&gt; &lt;span class="nx"&gt;outro&lt;/span&gt; &lt;span class="nx"&gt;estado&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explicação:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;useCallback:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;O increment é memoizado com &lt;strong&gt;useCallback&lt;/strong&gt;, o que evita que ele seja &lt;strong&gt;recriado em cada renderização&lt;/strong&gt;. Isso é útil ao passar a função como prop para componentes filhos, evitando renderizações desnecessárias.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;useMemo:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;A variável &lt;strong&gt;expensiveCalculation&lt;/strong&gt; é calculada apenas quando o &lt;strong&gt;estado count muda&lt;/strong&gt;, evitando &lt;strong&gt;cálculos desnecessários&lt;/strong&gt; nas renderizações.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Testando a otimização:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Quando você clicar em "Alterar outro estado", verá que o cálculo pesado não será executado novamente, já que ele depende apenas de count.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Desmontagem: "Desmontando o modelo LEGO"
&lt;/h2&gt;

&lt;p&gt;Quando um componente é removido do DOM, o React realiza uma limpeza para evitar vazamentos de memória. Você pode lidar com isso usando:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useEffect&lt;/strong&gt; (com uma função de limpeza): Ideal para &lt;strong&gt;cancelar&lt;/strong&gt; inscrições ou temporizadores.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Timer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tick&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Limpeza ao desmontar&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Confira&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt; &lt;span class="nx"&gt;para&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt; &lt;span class="nx"&gt;ticks&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Por que isso é importante?
&lt;/h2&gt;

&lt;p&gt;Entender o ciclo de vida dos componentes React ajuda você a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Escrever códigos &lt;strong&gt;eficientes&lt;/strong&gt; e &lt;strong&gt;livres de bugs&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Otimizar o desempenho&lt;/strong&gt;, evitando re-renderizações desnecessárias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gerenciar &lt;strong&gt;efeitos colaterais&lt;/strong&gt; como chamadas de API e inscrições.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dominando esses conceitos, você estará pronto para lidar com aplicações React complexas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resumo: Ciclo de vida do React em poucas palavras
&lt;/h2&gt;

&lt;p&gt;Os componentes são &lt;strong&gt;montados&lt;/strong&gt; (inicializados e renderizados).&lt;/p&gt;

&lt;p&gt;Os componentes são &lt;strong&gt;atualizados&lt;/strong&gt; (mudanças de props/estado).&lt;/p&gt;

&lt;p&gt;Os componentes são &lt;strong&gt;desmontados&lt;/strong&gt; (limpos e removidos).&lt;/p&gt;

&lt;p&gt;Com hooks como useEffect, useCallback e useMemo, você tem as ferramentas para gerenciar cada fase de forma eficaz.&lt;br&gt;
Bons códigos!&lt;/p&gt;

</description>
      <category>react</category>
    </item>
    <item>
      <title>O que é Hoisting no JavaScript?</title>
      <dc:creator>Jonas Gabriel</dc:creator>
      <pubDate>Tue, 14 Jan 2025 13:57:24 +0000</pubDate>
      <link>https://dev.to/jgalmeida93/o-que-e-hoisting-no-javascript-46ic</link>
      <guid>https://dev.to/jgalmeida93/o-que-e-hoisting-no-javascript-46ic</guid>
      <description>&lt;p&gt;Imagine que você está se preparando para um show de mágica. Antes de começar, o mágico organiza todos os itens que ele vai usar no palco, colocando as cartas, os coelhos e o chapéu no lugar certo. Isso ajuda ele a fazer os truques sem se atrapalhar.&lt;/p&gt;

&lt;p&gt;No JavaScript, acontece algo parecido quando você escreve seu código. O "mágico", nesse caso, é o JavaScript, que organiza algumas coisas antes de começar a rodar o programa. Essa organização automática é chamada de &lt;strong&gt;hoisting&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como o Hoisting Funciona?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Definições Primeiro:&lt;/strong&gt;&lt;br&gt;
O JavaScript pega todas as &lt;strong&gt;declarações&lt;/strong&gt; de variáveis e funções e as "sobe" para o topo do código. É como se ele dissesse: "Antes de começar, vou separar tudo o que é importante para não me perder."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt;&lt;br&gt;
Só as &lt;strong&gt;declarações&lt;/strong&gt; são movidas para o topo, não os valores atribuídos. É como se você dissesse: "Ei, essa cartola mágica existe!", mas o JavaScript só descobre &lt;strong&gt;como&lt;/strong&gt; usar a cartola quando chegar na hora certa no código.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Um Exemplo Simples
&lt;/h2&gt;

&lt;p&gt;Veja este código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;meuNome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;meuNome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jonas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;meuNome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Jonas&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No início, parece estranho: Como o JavaScript sabe que &lt;code&gt;meuNome&lt;/code&gt; existe antes de eu declarar?&lt;/p&gt;

&lt;p&gt;Isso acontece porque ele faz algo assim nos bastidores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;meuNome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Declaração "subiu"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;meuNome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;span class="nx"&gt;meuNome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jonas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Valor atribuído&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;meuNome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Jonas&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja, ele sobe a declaração da variável &lt;strong&gt;meuNome&lt;/strong&gt;, mas só atribui o valor &lt;strong&gt;"Jonas"&lt;/strong&gt; no lugar certo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hoisting com &lt;strong&gt;let&lt;/strong&gt; e &lt;strong&gt;const&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Agora, tem uma diferença importante: se você usar &lt;strong&gt;let&lt;/strong&gt; ou &lt;strong&gt;const&lt;/strong&gt;, o JavaScript &lt;strong&gt;não deixa você usar as variáveis antes de declarar&lt;/strong&gt;.&lt;br&gt;
Olha só:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Erro: Cannot access 'idade' before initialization&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso acontece porque &lt;strong&gt;let&lt;/strong&gt; e &lt;strong&gt;const&lt;/strong&gt; ficam "guardados" numa área especial e só podem ser usadas depois que você as declarou.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hoisting com Funções
&lt;/h2&gt;

&lt;p&gt;Funções no JavaScript também são "erguidas". Veja este exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;cumprimentar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;cumprimentar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Olá!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo chamando a função &lt;strong&gt;antes de declarar&lt;/strong&gt;, ela funciona! Isso acontece porque o JavaScript "sobe" a função inteira para o topo do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O hoisting é como se o JavaScript fosse um mágico super organizado: ele dá uma olhada rápida no seu código antes de começar a rodar, separa todas as declarações de variáveis e funções, e só depois começa o show.&lt;/p&gt;

&lt;p&gt;Mas lembre-se: com grandes poderes vêm grandes responsabilidades. Usar o hoisting sem entender pode causar confusão. Então, declare suas variáveis e funções com cuidado para que seu código fique mais claro e organizado!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>hoisting</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
