<?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: EliasGabriel1</title>
    <description>The latest articles on DEV Community by EliasGabriel1 (@eliasgabriel1).</description>
    <link>https://dev.to/eliasgabriel1</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%2F745169%2Ff51ed304-e7c4-4439-bad7-46c67df8ed7b.jpeg</url>
      <title>DEV Community: EliasGabriel1</title>
      <link>https://dev.to/eliasgabriel1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eliasgabriel1"/>
    <language>en</language>
    <item>
      <title>Utilize o conceito de elevação de estado (lifting state up) para compartilhar dados entre componentes irmãos no React.</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Sat, 22 Apr 2023 00:37:08 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/utilize-o-conceito-de-elevacao-de-estado-lifting-state-up-para-compartilhar-dados-entre-componentes-irmaos-no-react-2cao</link>
      <guid>https://dev.to/eliasgabriel1/utilize-o-conceito-de-elevacao-de-estado-lifting-state-up-para-compartilhar-dados-entre-componentes-irmaos-no-react-2cao</guid>
      <description>&lt;p&gt;O React é uma das bibliotecas JavaScript mais populares para construção de interfaces de usuário. Com o React, é possível criar componentes reutilizáveis, que são como peças de lego que podem ser combinadas para formar interfaces complexas. No entanto, uma das maiores dificuldades no desenvolvimento com React é compartilhar dados entre componentes irmãos.&lt;/p&gt;
&lt;p&gt;O conceito de elevação de estado (lifting state up) é uma das soluções mais comuns para compartilhar dados entre componentes irmãos no React. Neste artigo, vamos explicar o que é elevação de estado e como ela funciona.&lt;/p&gt;
&lt;h2&gt;O que é elevação de estado?&lt;/h2&gt;
&lt;p&gt;Elevação de estado é um padrão de design que consiste em mover o estado compartilhado entre componentes irmãos para um ancestral comum. Em outras palavras, ao invés de cada componente irmão ter seu próprio estado, o estado é mantido em um componente pai e passado para os componentes filhos como propriedades.&lt;/p&gt;
&lt;p&gt;O objetivo da elevação de estado é simplificar a comunicação entre componentes irmãos e tornar o código mais fácil de entender e manter.&lt;/p&gt;
&lt;h2&gt;Como funciona a elevação de estado?&lt;/h2&gt;
&lt;p&gt;Para entender como a elevação de estado funciona, vamos considerar o exemplo de uma aplicação de carrinho de compras. Suponha que temos três componentes irmãos: um componente &lt;code&gt;Carrinho&lt;/code&gt; que mostra os itens do carrinho, um componente &lt;code&gt;ListaDeProdutos&lt;/code&gt; que lista os produtos disponíveis para compra e um componente &lt;code&gt;ItemDeProduto&lt;/code&gt; que representa um item de produto na lista.&lt;/p&gt;
&lt;p&gt;Inicialmente, cada componente tem seu próprio estado. O componente &lt;code&gt;ListaDeProdutos&lt;/code&gt; mantém uma lista de produtos disponíveis, o componente &lt;code&gt;ItemDeProduto&lt;/code&gt; mantém o estado do produto selecionado e o componente &lt;code&gt;Carrinho&lt;/code&gt; mantém a lista de itens no carrinho.&lt;/p&gt;
&lt;p&gt;No entanto, para que os componentes &lt;code&gt;ListaDeProdutos&lt;/code&gt; e &lt;code&gt;Carrinho&lt;/code&gt; possam interagir entre si, precisamos passar informações entre eles. Isso pode ser feito usando elevação de estado. Em vez de manter o estado do carrinho no componente &lt;code&gt;Carrinho&lt;/code&gt;, podemos movê-lo para um componente pai comum, como o componente &lt;code&gt;App&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title class_"&gt;App&lt;/span&gt; &lt;span class="hljs-keyword"&gt;extends&lt;/span&gt; &lt;span class="hljs-title class_ inherited__"&gt;React.Component&lt;/span&gt; {
  &lt;span class="hljs-title function_"&gt;constructor&lt;/span&gt;(&lt;span class="hljs-params"&gt;props&lt;/span&gt;) {
    &lt;span class="hljs-variable language_"&gt;super&lt;/span&gt;(props);
    &lt;span class="hljs-variable language_"&gt;this&lt;/span&gt;.&lt;span class="hljs-property"&gt;state&lt;/span&gt; = {
      &lt;span class="hljs-attr"&gt;produtos&lt;/span&gt;: [
        {&lt;span class="hljs-attr"&gt;id&lt;/span&gt;: &lt;span class="hljs-number"&gt;1&lt;/span&gt;, &lt;span class="hljs-attr"&gt;nome&lt;/span&gt;: &lt;span class="hljs-string"&gt;"Camiseta"&lt;/span&gt;, &lt;span class="hljs-attr"&gt;preco&lt;/span&gt;: &lt;span class="hljs-number"&gt;29.90&lt;/span&gt;},
        {&lt;span class="hljs-attr"&gt;id&lt;/span&gt;: &lt;span class="hljs-number"&gt;2&lt;/span&gt;, &lt;span class="hljs-attr"&gt;nome&lt;/span&gt;: &lt;span class="hljs-string"&gt;"Calça"&lt;/span&gt;, &lt;span class="hljs-attr"&gt;preco&lt;/span&gt;: &lt;span class="hljs-number"&gt;59.90&lt;/span&gt;},
        {&lt;span class="hljs-attr"&gt;id&lt;/span&gt;: &lt;span class="hljs-number"&gt;3&lt;/span&gt;, &lt;span class="hljs-attr"&gt;nome&lt;/span&gt;: &lt;span class="hljs-string"&gt;"Tênis"&lt;/span&gt;, &lt;span class="hljs-attr"&gt;preco&lt;/span&gt;: &lt;span class="hljs-number"&gt;99.90&lt;/span&gt;}
      ],
      &lt;span class="hljs-attr"&gt;itensCarrinho&lt;/span&gt;: []
    };
  }

  adicionarItemAoCarrinho = &lt;span class="hljs-function"&gt;(&lt;span&gt;produto&lt;/span&gt;) =&amp;gt;&lt;/span&gt; {
    &lt;span class="hljs-variable language_"&gt;this&lt;/span&gt;.&lt;span class="hljs-title function_"&gt;setState&lt;/span&gt;(&lt;span class="hljs-function"&gt;&lt;span&gt;prevState&lt;/span&gt; =&amp;gt;&lt;/span&gt; ({
      &lt;span class="hljs-attr"&gt;itensCarrinho&lt;/span&gt;: [...prevState.&lt;span class="hljs-property"&gt;itensCarrinho&lt;/span&gt;, produto]
    }));
  }

  &lt;span class="hljs-title function_"&gt;render&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;/span&gt;) {
    &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; (
      &lt;span class="xml"&gt;&lt;span&gt;&amp;lt;&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span&gt;&amp;lt;&lt;span&gt;ListaDeProdutos&lt;/span&gt;
          &lt;span&gt;produtos&lt;/span&gt;=&lt;span&gt;{this.state.produtos}&lt;/span&gt;
          &lt;span&gt;adicionarItemAoCarrinho&lt;/span&gt;=&lt;span&gt;{this.adicionarItemAoCarrinho}&lt;/span&gt;
        /&amp;gt;&lt;/span&gt;
        &lt;span&gt;&amp;lt;&lt;span&gt;Carrinho&lt;/span&gt; &lt;span&gt;itens&lt;/span&gt;=&lt;span&gt;{this.state.itensCarrinho}&lt;/span&gt; /&amp;gt;&lt;/span&gt;
      &lt;span&gt;&amp;lt;/&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No exemplo acima, movemos o estado &lt;code&gt;itensCarrinho&lt;/code&gt; do componente &lt;code&gt;Carrinho&lt;/code&gt; para o componente&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Utilize o hook useDebugValue para adicionar rótulos personalizados a valores no React DevTools</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Wed, 19 Apr 2023 18:49:59 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/utilize-o-hook-usedebugvalue-para-adicionar-rotulos-personalizados-a-valores-no-react-devtools-19j</link>
      <guid>https://dev.to/eliasgabriel1/utilize-o-hook-usedebugvalue-para-adicionar-rotulos-personalizados-a-valores-no-react-devtools-19j</guid>
      <description>&lt;p&gt;O React é uma biblioteca JavaScript popularmente utilizada para a criação de interfaces de usuário. Uma de suas principais características é a capacidade de rastrear e atualizar a árvore de elementos do DOM de forma eficiente.&lt;/p&gt;
&lt;p&gt;Para auxiliar na depuração (debug) de uma aplicação React, é possível utilizar a ferramenta React DevTools, que permite visualizar a hierarquia de componentes e seus estados em tempo real.&lt;/p&gt;
&lt;p&gt;O hook &lt;code&gt;useDebugValue&lt;/code&gt; é uma ferramenta importante que pode ser utilizada em conjunto com o React DevTools para fornecer rótulos personalizados aos valores que são exibidos na ferramenta de depuração.&lt;/p&gt;
&lt;h2&gt;O que é o hook useDebugValue?&lt;/h2&gt;
&lt;p&gt;O hook &lt;code&gt;useDebugValue&lt;/code&gt; é uma ferramenta que permite adicionar rótulos personalizados aos valores que são exibidos na ferramenta React DevTools. O hook é usado em conjunto com outros hooks do React, como &lt;code&gt;useState&lt;/code&gt; e &lt;code&gt;useEffect&lt;/code&gt;, e permite que um rótulo personalizado seja atribuído a um valor.&lt;/p&gt;
&lt;p&gt;O &lt;code&gt;useDebugValue&lt;/code&gt; é especialmente útil para valores que podem ser difíceis de entender ou que exigem um contexto adicional para serem compreendidos.&lt;/p&gt;
&lt;h2&gt;Como utilizar o hook useDebugValue?&lt;/h2&gt;
&lt;p&gt;Para utilizar o hook &lt;code&gt;useDebugValue&lt;/code&gt;, é necessário importá-lo da biblioteca &lt;code&gt;react&lt;/code&gt; e passar o valor a ser rotulado como parâmetro. Em seguida, é possível passar uma função como segundo parâmetro, que será responsável por fornecer o rótulo personalizado para o valor.&lt;/p&gt;
&lt;p&gt;Por exemplo, suponha que você tenha um componente que utilize o hook &lt;code&gt;useState&lt;/code&gt; para gerenciar o estado de um contador:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="hljs-keyword"&gt;import&lt;/span&gt; &lt;span class="hljs-title class_"&gt;React&lt;/span&gt;, { useState } &lt;span class="hljs-keyword"&gt;from&lt;/span&gt; &lt;span class="hljs-string"&gt;'react'&lt;/span&gt;;

&lt;span class="hljs-keyword"&gt;function&lt;/span&gt; &lt;span class="hljs-title function_"&gt;Counter&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;/span&gt;) {
  &lt;span class="hljs-keyword"&gt;const&lt;/span&gt; [count, setCount] = &lt;span class="hljs-title function_"&gt;useState&lt;/span&gt;(&lt;span class="hljs-number"&gt;0&lt;/span&gt;);

  &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; (
    &lt;span class="xml"&gt;&lt;span&gt;&amp;lt;&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
      &lt;span&gt;&amp;lt;&lt;span&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;Count: {count}&lt;span&gt;&amp;lt;/&lt;span&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;
      &lt;span&gt;&amp;lt;&lt;span&gt;button&lt;/span&gt; &lt;span&gt;onClick&lt;/span&gt;=&lt;span&gt;{()&lt;/span&gt; =&amp;gt;&lt;/span&gt; setCount(count + 1)}&amp;gt;Increment&lt;span&gt;&amp;lt;/&lt;span&gt;button&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span&gt;&amp;lt;/&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para adicionar um rótulo personalizado para o valor &lt;code&gt;count&lt;/code&gt;, é possível utilizar o &lt;code&gt;useDebugValue&lt;/code&gt; da seguinte forma:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="hljs-keyword"&gt;import&lt;/span&gt; &lt;span class="hljs-title class_"&gt;React&lt;/span&gt;, { useState, useDebugValue } &lt;span class="hljs-keyword"&gt;from&lt;/span&gt; &lt;span class="hljs-string"&gt;'react'&lt;/span&gt;;

&lt;span class="hljs-keyword"&gt;function&lt;/span&gt; &lt;span class="hljs-title function_"&gt;useCounter&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;/span&gt;) {
  &lt;span class="hljs-keyword"&gt;const&lt;/span&gt; [count, setCount] = &lt;span class="hljs-title function_"&gt;useState&lt;/span&gt;(&lt;span class="hljs-number"&gt;0&lt;/span&gt;);

  &lt;span class="hljs-title function_"&gt;useDebugValue&lt;/span&gt;(count, &lt;span class="hljs-function"&gt;() =&amp;gt;&lt;/span&gt; &lt;span class="hljs-string"&gt;`Count: &lt;span&gt;${count}&lt;/span&gt;`&lt;/span&gt;);

  &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; [count, setCount];
}

&lt;span class="hljs-keyword"&gt;function&lt;/span&gt; &lt;span class="hljs-title function_"&gt;Counter&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;/span&gt;) {
  &lt;span class="hljs-keyword"&gt;const&lt;/span&gt; [count, setCount] = &lt;span class="hljs-title function_"&gt;useCounter&lt;/span&gt;();

  &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; (
    &lt;span class="xml"&gt;&lt;span&gt;&amp;lt;&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
      &lt;span&gt;&amp;lt;&lt;span&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;Count: {count}&lt;span&gt;&amp;lt;/&lt;span&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;
      &lt;span&gt;&amp;lt;&lt;span&gt;button&lt;/span&gt; &lt;span&gt;onClick&lt;/span&gt;=&lt;span&gt;{()&lt;/span&gt; =&amp;gt;&lt;/span&gt; setCount(count + 1)}&amp;gt;Increment&lt;span&gt;&amp;lt;/&lt;span&gt;button&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span&gt;&amp;lt;/&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Neste exemplo, o hook &lt;code&gt;useDebugValue&lt;/code&gt; é utilizado para adicionar o rótulo "Count: " ao valor &lt;code&gt;count&lt;/code&gt;. Agora, quando você inspecionar o componente &lt;code&gt;Counter&lt;/code&gt; no React DevTools, o valor &lt;code&gt;count&lt;/code&gt; será exibido como "Count: 0" (ou "Count: 1", "Count: 2", etc., dependendo do valor atual de &lt;code&gt;count&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O hook &lt;code&gt;useDebugValue&lt;/code&gt; é uma ferramenta útil para adicionar rótulos personalizados aos valores que são exibidos no React DevTools. Com o uso do &lt;code&gt;useDebugValue&lt;/code&gt;, é possível tornar mais fácil a compreensão e depuração&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Utilize o hook useMemo para otimizar o desempenho de cálculos caros em componentes funcionais no React.</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Mon, 17 Apr 2023 21:36:27 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/utilize-o-hook-usememo-para-otimizar-o-desempenho-de-calculos-caros-em-componentes-funcionais-no-react-1lc0</link>
      <guid>https://dev.to/eliasgabriel1/utilize-o-hook-usememo-para-otimizar-o-desempenho-de-calculos-caros-em-componentes-funcionais-no-react-1lc0</guid>
      <description>&lt;h1&gt;Utilize o hook useMemo para otimizar o desempenho de cálculos caros em componentes funcionais no React&lt;/h1&gt;
&lt;p&gt;O React é uma biblioteca JavaScript popular para a construção de interfaces de usuário. Uma das suas principais características é a sua capacidade de atualizar somente as partes da interface que precisam ser atualizadas, o que ajuda a melhorar o desempenho da aplicação. No entanto, se não for usado corretamente, pode haver problemas de desempenho quando a aplicação cresce. O hook useMemo é uma ferramenta útil para otimizar o desempenho de cálculos caros em componentes funcionais no React.&lt;/p&gt;
&lt;h2&gt;O que é o hook useMemo?&lt;/h2&gt;
&lt;p&gt;O hook useMemo é um hook do React que permite que você memorize o resultado de uma função. Ele é útil quando você tem uma função que leva muito tempo para ser executada e essa função é chamada repetidamente, resultando em um desempenho ruim da aplicação.&lt;/p&gt;
&lt;p&gt;O hook useMemo aceita dois argumentos. O primeiro é uma função que realiza os cálculos que você deseja memorizar. O segundo é um array de dependências. Se as dependências não mudarem entre as renderizações do componente, o useMemo retornará o resultado memorizado. Se as dependências mudarem, o useMemo executará a função novamente e atualizará o resultado memorizado.&lt;/p&gt;
&lt;h2&gt;Como usar o hook useMemo para otimizar o desempenho?&lt;/h2&gt;
&lt;p&gt;Vamos dar um exemplo para ilustrar como usar o hook useMemo para otimizar o desempenho. Suponha que você tenha um componente que calcula a soma de todos os números de 1 a N, onde N é um valor passado como prop para o componente.&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;jsx&lt;/span&gt;Copy code&lt;code&gt;&lt;span class="hljs-keyword"&gt;import&lt;/span&gt; &lt;span class="hljs-title class_"&gt;React&lt;/span&gt;, { useMemo } &lt;span class="hljs-keyword"&gt;from&lt;/span&gt; &lt;span class="hljs-string"&gt;'react'&lt;/span&gt;;

&lt;p&gt;&lt;span class="hljs-keyword"&gt;function&lt;/span&gt; &lt;span class="hljs-title function_"&gt;Sum&lt;/span&gt;(&lt;span class="hljs-params"&gt;{ n }&lt;/span&gt;) {&lt;br&gt;
  &lt;span class="hljs-keyword"&gt;const&lt;/span&gt; sum = &lt;span class="hljs-title function_"&gt;useMemo&lt;/span&gt;(&lt;span class="hljs-function"&gt;() =&amp;gt;&lt;/span&gt; {&lt;br&gt;
    &lt;span class="hljs-keyword"&gt;let&lt;/span&gt; result = &lt;span class="hljs-number"&gt;0&lt;/span&gt;;&lt;br&gt;
    &lt;span class="hljs-keyword"&gt;for&lt;/span&gt; (&lt;span class="hljs-keyword"&gt;let&lt;/span&gt; i = &lt;span class="hljs-number"&gt;1&lt;/span&gt;; i &amp;lt;= n; i++) {&lt;br&gt;
      result += i;&lt;br&gt;
    }&lt;br&gt;
    &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; result;&lt;br&gt;
  }, [n]);&lt;/p&gt;

&lt;p&gt;&lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="xml"&gt;&lt;span&gt;&amp;lt;&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;{sum}&lt;span&gt;&amp;lt;/&lt;span&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;;&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Neste exemplo, a função &lt;code&gt;sum&lt;/code&gt; é passada como argumento para o hook useMemo. O array de dependências contém apenas a variável N, indicando que o useMemo deve atualizar o resultado memorizado apenas se N mudar. O resultado memorizado é armazenado na variável sum, que é usada no retorno do componente. Dessa forma, a função sum é chamada apenas uma vez quando o componente é renderizado pela primeira vez ou quando o valor de N mudar.&lt;/p&gt;
&lt;h2&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O hook useMemo é uma ferramenta poderosa para otimizar o desempenho de cálculos caros em componentes funcionais no React. Ele permite que você memorize o resultado de uma função e atualize apenas quando as dependências mudarem. Isso pode melhorar significativamente o desempenho da sua aplicação, especialmente quando você está lidando com cálculos complexos ou grandes conjuntos de dados. Lembre-se sempre de analisar e otimizar o desempenho da sua aplicação para garantir uma boa experiência do usuário.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
    </item>
    <item>
      <title>Quais os principais hooks do react?</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Fri, 14 Apr 2023 20:41:31 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/quais-os-principais-hooks-do-react-4bkd</link>
      <guid>https://dev.to/eliasgabriel1/quais-os-principais-hooks-do-react-4bkd</guid>
      <description>&lt;h4&gt;
  
  
  Os Hooks são uma feature introduzida no React a partir da versão 16.8, que permite que os desenvolvedores usem state e outras características do React em componentes de função, sem a necessidade de usar classes. Existem vários Hooks disponíveis no React, e os principais são:
&lt;/h4&gt;


&lt;ol&gt;

      &lt;li&gt;useState: Hook para gerenciar estado interno em componentes de função&lt;/li&gt;

      &lt;li&gt;useEffect: Hook para lidar com efeitos colaterais em componentes de função&lt;/li&gt;

      &lt;li&gt;useContext: Hook para acessar o contexto (Context) do React&lt;/li&gt;

      &lt;li&gt;useReducer: Hook para gerenciar estado complexo usando um reducer&lt;/li&gt;

      &lt;li&gt;useCallback: Hook para criar funções memorizadas em componentes de função&lt;/li&gt;

      &lt;li&gt;useMemo: Hook para memoizar cálculos em componentes de função&lt;/li&gt;

    &lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Em detalhes seria:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;`useState&lt;/em&gt;&lt;code&gt;: Este Hook permite que os componentes de função tenham estado interno, permitindo que eles gerenciem e atualizem valores de estado. É a alternativa ao uso de &lt;/code&gt;&lt;em&gt;this.state&lt;/em&gt;` em componentes de classe. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [state, setState] = useState(initialState);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;code&gt;useEffect&lt;/code&gt;&lt;/em&gt;: Este Hook permite que os componentes de função tenham efeitos colaterais, como buscar dados de APIs externas, atualizar o DOM ou gerenciar subscrições. É a alternativa ao uso de &lt;em&gt;&lt;code&gt;componentDidMount&lt;/code&gt;&lt;/em&gt;, &lt;em&gt;&lt;code&gt;componentDidUpdate&lt;/code&gt;&lt;/em&gt; e &lt;em&gt;&lt;code&gt;componentWillUnmount&lt;/code&gt;&lt;/em&gt; em componentes de classe. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useEffect(() =&amp;gt; {
  // Lógica do efeito colateral
  return () =&amp;gt; {
    // Limpeza do efeito colateral (opcional)
  }
}, [dependencies]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;code&gt;useContext&lt;/code&gt;&lt;/em&gt;: Este Hook permite que os componentes de função acessem o contexto (Context) do React, que é uma forma de compartilhar dados entre componentes sem a necessidade de passar props manualmente. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const contextValue = useContext(MyContext);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;code&gt;useReducer&lt;/code&gt;&lt;/em&gt;: Este Hook permite que os componentes de função gerenciem estados complexos usando um reducer, seguindo o padrão de design de estado do Redux. É uma alternativa ao uso de &lt;em&gt;&lt;code&gt;setState&lt;/code&gt;&lt;/em&gt; em componentes de função. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [state, dispatch] = useReducer(reducer, initialState);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;code&gt;useCallback&lt;/code&gt;&lt;/em&gt;: Este Hook permite que os componentes de função criem funções memorizadas que não são recriadas em cada renderização, o que pode ser útil em casos onde é importante otimizar a performance. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const memoizedCallback = useCallback(() =&amp;gt; {
  // Lógica da função
}, [dependencies]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;code&gt;useMemo&lt;/code&gt;&lt;/em&gt;: Este Hook permite que os componentes de função realizem memoização de cálculos, evitando recálculos desnecessários em cada renderização. É útil para otimizar a performance em casos onde o cálculo é computacionalmente custoso. A sintaxe básica é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const memoizedValue = useMemo(() =&amp;gt; {
  // Lógica do cálculo
}, [dependencies]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses são os principais Hooks do React, mas existem outros Hooks disponíveis, como &lt;em&gt;&lt;code&gt;useRef&lt;/code&gt;&lt;/em&gt;, &lt;em&gt;&lt;code&gt;useImperativeHandle&lt;/code&gt;&lt;/em&gt;, &lt;em&gt;&lt;code&gt;useLayoutEffect&lt;/code&gt;&lt;/em&gt;, entre outros. É importante consultar a documentação oficial do React para entender melhor cada um deles e saber quando utilizá-los em suas aplicações. Os Hooks são uma poderosa ferramenta que torna a escrita de componentes de função mais simples e eficiente, permitindo que os desenvolvedores aproveitem ao máximo o poder do React.&lt;/p&gt;

&lt;p&gt;Obrigado! se tu chegou até o final desse artigo, compartilhe esse artigo com algum amigo que você acha que gostaria de entender os conceitos básicos do react &amp;lt;3&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Qual a diferença entre .map, .for e .forEach?</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Thu, 13 Apr 2023 19:44:21 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/qual-a-diferenca-entre-map-for-e-foreach-20ok</link>
      <guid>https://dev.to/eliasgabriel1/qual-a-diferenca-entre-map-for-e-foreach-20ok</guid>
      <description>&lt;p&gt;A diferença entre os métodos .map(), .for e .forEach está relacionada à forma como eles são usados para percorrer e manipular elementos de uma lista (ou matriz) em JavaScript.&lt;/p&gt;

&lt;p&gt;.map(): É um método de array que cria um novo array com os resultados de uma função de callback aplicada a cada elemento do array original. Ele retorna um novo array com o mesmo tamanho do array original, onde cada elemento é transformado de acordo com a lógica definida na função de callback. O array original não é modificado durante o processo. Veja um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MQT020TQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/89pfcw6o89pvvp73v2gu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MQT020TQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/89pfcw6o89pvvp73v2gu.png" alt="Image description" width="660" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.for: É uma estrutura de loop tradicional em JavaScript, que permite percorrer um array usando um contador e uma condição de parada. É uma forma mais antiga e manual de percorrer um array, onde é necessário gerenciar manualmente o índice e acessar cada elemento usando a sintaxe array[indice]. É útil quando se precisa de um controle mais detalhado sobre o loop, como percorrer o array em ordem inversa, saltar elementos ou interromper o loop antecipadamente. Veja um exemplo:&lt;/p&gt;

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

&lt;p&gt;.forEach: É um método de array que também percorre cada elemento de um array, aplicando uma função de callback a cada elemento. No entanto, diferentemente do .map(), o método .forEach não cria um novo array com os resultados da função de callback, ele simplesmente executa a função em cada elemento do array original. Ele não retorna um novo array e não permite a transformação direta dos elementos do array original. Veja um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XaqghDIq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7cdpygdoqhjc3be63k4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XaqghDIq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7cdpygdoqhjc3be63k4q.png" alt="Image description" width="661" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em resumo, a principal diferença entre .map(), .for e .forEach está na forma como eles manipulam os elementos do array e retornam ou não um novo array com os resultados da operação. O .map() é ideal quando se deseja transformar os elementos de um array em um novo array, o .for é útil quando se precisa de um controle mais detalhado sobre o loop, e o .forEach é adequado quando se deseja apenas executar uma função em cada elemento do array original.&lt;/p&gt;

&lt;p&gt;Em suma, o método &lt;code&gt;.map()&lt;/code&gt; é projetado para criar um novo array com os resultados da aplicação de uma função de callback a cada elemento de um array original. Ele retorna um novo array com o mesmo número de elementos do array original, onde cada elemento é transformado de acordo com a lógica definida na função de callback. Portanto, se você estiver apenas interessado em percorrer os elementos de um array sem criar um novo array com os resultados da transformação, usar o &lt;code&gt;.map()&lt;/code&gt; pode ser desnecessário e até mesmo ineficiente.&lt;/p&gt;

&lt;p&gt;Além disso, o &lt;code&gt;.map()&lt;/code&gt; tem uma expectativa implícita de que você retornará um valor para cada elemento do array original em sua função de callback. Se você não retornar um valor específico, o resultado do &lt;code&gt;.map()&lt;/code&gt; será um novo array com elementos &lt;code&gt;undefined&lt;/code&gt;. Por outro lado, os loops tradicionais como o &lt;code&gt;.for&lt;/code&gt; e o &lt;code&gt;.forEach&lt;/code&gt; não têm essa expectativa, permitindo maior flexibilidade em como você manipula os elementos do array durante o loop.&lt;/p&gt;

&lt;p&gt;Outra consideração é que o &lt;code&gt;.map()&lt;/code&gt; cria um novo array a cada vez que é chamado, o que pode causar impacto na performance em casos onde se trabalha com arrays muito grandes, pois a criação de um novo array consome recursos de memória e processamento. Em contraste, um loop tradicional como o &lt;code&gt;.for&lt;/code&gt; ou o &lt;code&gt;.forEach&lt;/code&gt; não cria um novo array, o que pode ser mais eficiente em termos de performance.&lt;/p&gt;

&lt;p&gt;Portanto, não é que seja "errado" usar o &lt;code&gt;.map()&lt;/code&gt; para fazer um loop, mas é importante entender suas características e considerar se é a melhor opção em cada situação específica. Em algumas situações, um loop tradicional como o &lt;code&gt;.for&lt;/code&gt; ou o &lt;code&gt;.forEach&lt;/code&gt; pode ser mais adequado, especialmente quando você não precisa criar um novo array com os resultados da transformação dos elementos do array original, ou quando precisa de maior flexibilidade na manipulação dos elementos durante o loop.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Utilize o spread operator para copiar objetos e arrays de forma imutável.</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Wed, 12 Apr 2023 18:30:26 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/utilize-o-spread-operator-para-copiar-objetos-e-arrays-de-forma-imutavel-46gp</link>
      <guid>https://dev.to/eliasgabriel1/utilize-o-spread-operator-para-copiar-objetos-e-arrays-de-forma-imutavel-46gp</guid>
      <description>&lt;p&gt;`&lt;/p&gt;
&lt;p&gt;O spread operator é uma funcionalidade introduzida no JavaScript ES6 (ECMAScript 2015) que permite copiar objetos e arrays de forma imutável. O spread operator é representado pelo operador de reticências (&lt;code&gt;...&lt;/code&gt;) e pode ser usado para criar novos objetos ou arrays com cópias independentes de elementos existentes. Vamos dar uma olhada em como usar o spread operator para copiar objetos e arrays de forma imutável.&lt;/p&gt;
&lt;p&gt;Copiando Objetos com o Spread Operator:&lt;/p&gt;
&lt;p&gt;Para copiar um objeto de forma imutável, podemos usar o spread operator da seguinte forma:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;javascript&lt;/span&gt;&lt;code&gt;&lt;span class="hljs-keyword"&gt;const&lt;/span&gt; obj1 = { &lt;span class="hljs-attr"&gt;foo&lt;/span&gt;: &lt;span class="hljs-string"&gt;'bar'&lt;/span&gt;, &lt;span class="hljs-attr"&gt;baz&lt;/span&gt;: &lt;span class="hljs-string"&gt;'qux'&lt;/span&gt; };

&lt;p&gt;&lt;span&gt;// Copiando obj1 para obj2 usando spread operator&lt;/span&gt;&lt;br&gt;
&lt;span&gt;const&lt;/span&gt; obj2 = { ...obj1 };&lt;/p&gt;

&lt;p&gt;&lt;span&gt;// Alterando o valor de uma propriedade em obj2&lt;/span&gt;&lt;br&gt;
obj2.&lt;span&gt;foo&lt;/span&gt; = &lt;span&gt;'baz'&lt;/span&gt;;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;console&lt;/span&gt;.&lt;span&gt;log&lt;/span&gt;(obj1); &lt;span&gt;// { foo: 'bar', baz: 'qux' }&lt;/span&gt;&lt;br&gt;
&lt;span&gt;console&lt;/span&gt;.&lt;span&gt;log&lt;/span&gt;(obj2); &lt;span&gt;// { foo: 'baz', baz: 'qux' }&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No exemplo acima, usamos o spread operator &lt;code&gt;{...obj1}&lt;/code&gt; para criar um novo objeto &lt;code&gt;obj2&lt;/code&gt; com as mesmas propriedades e valores de &lt;code&gt;obj1&lt;/code&gt;. Em seguida, modificamos o valor da propriedade &lt;code&gt;foo&lt;/code&gt; em &lt;code&gt;obj2&lt;/code&gt;, mas isso não afetou o valor da mesma propriedade em &lt;code&gt;obj1&lt;/code&gt;, uma vez que &lt;code&gt;obj2&lt;/code&gt; é uma cópia independente de &lt;code&gt;obj1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Copiando Arrays com o Spread Operator:&lt;/p&gt;
&lt;p&gt;Podemos usar o spread operator para copiar arrays de forma imutável também. Veja o exemplo abaixo:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;javascript&lt;/span&gt;&lt;code&gt;&lt;span class="hljs-keyword"&gt;const&lt;/span&gt; arr1 = [&lt;span class="hljs-number"&gt;1&lt;/span&gt;, &lt;span class="hljs-number"&gt;2&lt;/span&gt;, &lt;span class="hljs-number"&gt;3&lt;/span&gt;, &lt;span class="hljs-number"&gt;4&lt;/span&gt;, &lt;span class="hljs-number"&gt;5&lt;/span&gt;];

&lt;p&gt;&lt;span&gt;// Copiando arr1 para arr2 usando spread operator&lt;/span&gt;&lt;br&gt;
&lt;span&gt;const&lt;/span&gt; arr2 = [...arr1];&lt;/p&gt;

&lt;p&gt;&lt;span&gt;// Modificando arr2&lt;/span&gt;&lt;br&gt;
arr2.&lt;span&gt;push&lt;/span&gt;(&lt;span&gt;6&lt;/span&gt;);&lt;/p&gt;


&lt;p&gt;&lt;span&gt;console&lt;/span&gt;.&lt;span&gt;log&lt;/span&gt;(arr1); &lt;span&gt;// [1, 2, 3, 4, 5]&lt;/span&gt;&lt;br&gt;&lt;br&gt;
&lt;span&gt;console&lt;/span&gt;.&lt;span&gt;log&lt;/span&gt;(arr2); &lt;span&gt;// [1, 2, 3, 4, 5, 6]&lt;/span&gt;&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No exemplo acima, usamos o spread operator &lt;code&gt;[...arr1]&lt;/code&gt; para criar um novo array &lt;code&gt;arr2&lt;/code&gt; com os mesmos elementos de &lt;code&gt;arr1&lt;/code&gt;. Em seguida, adicionamos um novo elemento ao final de &lt;code&gt;arr2&lt;/code&gt;, mas isso não afetou o valor de &lt;code&gt;arr1&lt;/code&gt;, uma vez que &lt;code&gt;arr2&lt;/code&gt; é uma cópia independente de &lt;code&gt;arr1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vantagens da Cópia Imutável com o Spread Operator:&lt;/p&gt;
&lt;p&gt;A cópia imutável com o spread operator tem várias vantagens, incluindo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Prevenção de efeitos colaterais: Quando objetos ou arrays são copiados de forma imutável, quaisquer alterações feitas nas cópias não afetam os originais. Isso ajuda a prevenir efeitos colaterais indesejados em seu código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Independência das referências: As cópias feitas com o spread operator são independentes das referências originais. Isso significa que as alterações feitas nas cópias não afetam as referências originais, tornando mais fácil gerenciar o estado de objetos e arrays em seu código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Facilidade de uso: O spread operator é uma sintaxe concisa e fácil de usar para criar cópias de objetos e arrays. É amplamente suportado em navegadores modernos e também é amplamente utilizado em frameworks e bibliotecas populares do JavaScript.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;p&gt;Flexibilidade: O spread operator pode ser combinado com outras funcionalidades do JavaScript, como destructuring e rest parameters, para criar cópias mais complexas de objetos e arrays, ou para realizar transformações em elementos copiados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance: Embora a cópia imutável com o spread operator possa parecer criar novos objetos ou arrays, na verdade, muitas implementações modernas de JavaScript otimizam o uso do spread operator para melhorar a performance. Isso ocorre porque o spread operator permite a propagação de elementos diretamente, em vez de criar cópias profundas de objetos ou arrays, o que pode ser mais eficiente em termos de desempenho.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;code&gt;&lt;br&gt;&lt;br&gt;
&lt;/code&gt;&lt;p&gt;Em resumo, o spread operator é uma poderosa ferramenta que permite copiar objetos e arrays de forma imutável no JavaScript. Ele ajuda a evitar efeitos colaterais, fornece independência das referências, é fácil de usar e oferece flexibilidade e bom desempenho. Se você precisa trabalhar com objetos ou arrays em seu código JavaScript e deseja garantir a imutabilidade, o spread operator é uma opção eficaz para copiar esses elementos de forma segura.&lt;/p&gt;`

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>ecmascript</category>
    </item>
    <item>
      <title>Utilize a desestruturação (destructuring) para extrair valores de objetos e arrays de forma mais concisa e legível.</title>
      <dc:creator>EliasGabriel1</dc:creator>
      <pubDate>Tue, 11 Apr 2023 19:20:17 +0000</pubDate>
      <link>https://dev.to/eliasgabriel1/utilize-a-desestruturacao-destructuring-para-extrair-valores-de-objetos-e-arrays-de-forma-mais-concisa-e-legivel-25ai</link>
      <guid>https://dev.to/eliasgabriel1/utilize-a-desestruturacao-destructuring-para-extrair-valores-de-objetos-e-arrays-de-forma-mais-concisa-e-legivel-25ai</guid>
      <description>&lt;p&gt;A desestruturação (destructuring) é uma funcionalidade poderosa do JavaScript que permite extrair valores de objetos e arrays de forma mais concisa e legível. Ela foi introduzida no ECMAScript 6 (ES6) e é amplamente utilizada em código moderno para simplificar a manipulação de dados.&lt;/p&gt;

&lt;p&gt;Vamos explorar como utilizar a desestruturação para extrair valores de objetos e arrays de forma eficiente:&lt;/p&gt;

&lt;p&gt;1.Desestruturação de objetos:&lt;br&gt;
Podemos extrair valores de objetos utilizando a sintaxe de desestruturação. Por exemplo, suponha que temos o seguinte objeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1fAD3bZN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cupnd4fa7o896f7wr8yy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1fAD3bZN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cupnd4fa7o896f7wr8yy.png" alt="Image description" width="668" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos extrair os valores das propriedades &lt;code&gt;nome&lt;/code&gt;, &lt;code&gt;idade&lt;/code&gt; e &lt;code&gt;cidade&lt;/code&gt; do objeto &lt;code&gt;pessoa&lt;/code&gt; da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uO_hsRas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4tp3ethi2m67lw79agmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uO_hsRas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4tp3ethi2m67lw79agmq.png" alt="Image description" width="662" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso nos permite criar variáveis com os mesmos nomes das propriedades do objeto e atribuir automaticamente os valores correspondentes.&lt;/p&gt;

&lt;p&gt;Também podemos definir valores padrão caso a propriedade não exista no objeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8BTcFqcY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b85c4hsy0r34jnrgbue3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8BTcFqcY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b85c4hsy0r34jnrgbue3.png" alt="Image description" width="662" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Desestruturação de arrays:&lt;br&gt;
Podemos extrair valores de arrays utilizando a sintaxe de desestruturação. Por exemplo, suponha que temos o seguinte array:&lt;/p&gt;

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

&lt;p&gt;Podemos extrair os valores dos elementos do array numeros da seguinte forma:&lt;/p&gt;

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

&lt;p&gt;Também podemos utilizar a sintaxe de desestruturação com o operador rest (&lt;code&gt;...&lt;/code&gt;) para extrair uma parte do array e atribuí-la a uma nova variável:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9_jwWnkU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crjst0vk4p0563sutlti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9_jwWnkU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crjst0vk4p0563sutlti.png" alt="Image description" width="660" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Desestruturação em parâmetros de função:&lt;br&gt;
Podemos utilizar a desestruturação em parâmetros de função para extrair os valores de objetos ou arrays passados como argumentos de forma mais concisa. Por exemplo:&lt;/p&gt;

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

&lt;p&gt;Isso nos permite extrair os valores diretamente dos parâmetros da função, sem precisar acessar as propriedades do objeto dentro do corpo da função.&lt;/p&gt;

&lt;p&gt;Além disso, também podemos utilizar a desestruturação em parâmetros de função com valores padrão, assim como fizemos com a desestruturação de objetos. Por exemplo:&lt;/p&gt;

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

&lt;p&gt;Isso nos permite definir valores padrão para as propriedades do objeto caso elas não sejam passadas como argumentos.&lt;/p&gt;

&lt;p&gt;Em resumo, a desestruturação (destructuring) é uma ferramenta poderosa do JavaScript que nos permite extrair valores de objetos e arrays de forma concisa e legível. É uma técnica muito utilizada em código moderno para simplificar a manipulação de dados e tornar o código mais eficiente e fácil de entender. É importante estar familiarizado com essa funcionalidade e utilizá-la em seu código JavaScript e React para escrever um código mais limpo e eficiente.&lt;/p&gt;

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