Dominando useState
, useMemo
e useCallback
no React
E aí, devs! 🚀
Se você está desenvolvendo com React e quer entender como otimizar o desempenho da sua aplicação, é fundamental conhecer os hooks useState
, useMemo
e useCallback
. Neste post, vamos explorar quando e como usá-los para evitar re-renderizações desnecessárias e tornar seu código mais eficiente.
🟢 useState
: Gerenciando Estado
O useState
é um dos hooks mais básicos e essenciais do React. Ele permite que seus componentes funcionais tenham estado, possibilitando a atualização de valores ao longo do tempo.
📝 Exemplo de Uso
import React, { useState } from 'react';
function Contador() {
const [contador, setContador] = useState(0);
return (
<div>
<p>Contador: {contador}</p>
<button onClick={()=> setContador(contador + 1)}>Incrementar</button>
</div>
);
}
📌 Explicação
useState
retorna um array com dois valores:- O estado atual (
contador
) - Uma função para atualizar o estado (
setContador
)
- O estado atual (
- Quando o botão é pressionado, a função
setContador
atualiza o estado, forçando a re-renderização do componente.
🔵 useMemo
: Evitando Recalcular Valores Pesados
O useMemo
é utilizado para memorizar cálculos pesados, evitando que eles sejam reexecutados desnecessariamente.
📝 Exemplo de Uso
import React, { useState, useMemo } from 'react';
function ListaFiltrada({ lista }) {
const [termo, setTermo] = useState('');
const listaFiltrada = useMemo(() => {
return lista.filter((item) => item.includes(termo));
}, [lista, termo]);
return (
<div>
<input
type="text"
value={termo}
onChange={(e)=> setTermo(e.target.value)}
/>
<ul>
{listaFiltrada.map((item) => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
📌 Explicação
useMemo
recebe dois argumentos:- Uma função que retorna um valor memorizado
- Um array de dependências
- O cálculo só é refeito se as dependências mudarem, evitando trabalho desnecessário.
🟠 useCallback
: Otimizando Funções Passadas como Props
O useCallback
é semelhante ao useMemo
, mas em vez de memorizar um valor, ele memoriza uma função.
📝 Exemplo de Uso
import React, { useState, useCallback } from 'react';
function ComponentePai() {
const [contador, setContador] = useState(0);
const incrementar = useCallback(() => {
setContador((prev) => prev + 1);
}, []);
return (
<div>
<p>Contador: {contador}</p>
<ComponenteFilho onClick={incrementar} />
</div>
);
}
function ComponenteFilho({ onClick }) {
console.log('ComponenteFilho re-renderizou');
return <button onClick={onClick}>Incrementar</button>;
}
📌 Explicação
useCallback
evita que a funçãoincrementar
seja recriada a cada renderização.- Isso impede que o componente filho seja re-renderizado sem necessidade.
📊 Comparação entre os Hooks
🟢 useState
- Uso principal: Gerenciar estado interno de um componente.
- Evita: Não aplicável (é um hook de estado básico).
🔵 useMemo
- Uso principal: Memorizar cálculos pesados para evitar recomputação.
- Evita: Recalcular valores desnecessariamente.
🟠 useCallback
- Uso principal: Memorizar funções passadas como props.
- Evita: Re-renderizações desnecessárias de componentes filhos.
🚀 Conclusão
Dominar esses hooks permite que você escreva código mais eficiente e performático no React. Utilize useState
para gerenciar estado, useMemo
para evitar cálculos repetitivos e useCallback
para otimizar funções passadas como props.
Se tiver dúvidas ou quiser trocar uma ideia, deixe um comentário! 💬