useMemo
O useMemo é um Hook que permite memorizar o resultado de um cálculo caro entre renderizações.
Como funciona?
O React só re-executará a função de cálculo quando uma das dependências mudar. Caso contrário, ele retornará o valor armazenado em cache da última renderização.
javascript
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);Quando usar?
- Cálculos Pesados: Processamento de grandes listas, cálculos matemáticos complexos ou transformações de dados custosas.
- Referential Equality (Igualdade Referencial): Quando você cria um objeto ou array que será passado como prop para um componente otimizado (
React.memo) ou como dependência para outro Hook. Se você não usaruseMemo, um novo objeto{}é criado em toda renderização, quebrando a otimização.
Exemplo de Uso:
javascript
const sortedList = useMemo(() => {
console.log('Ordenando lista...');
return [...users].sort((a, b) => a.name.localeCompare(b.name));
}, [users]); // Só re-ordena se a lista de usuários mudarQuando NÃO usar?
- Operações simples: Não use
useMemopara somar dois números ou concatenar strings. O custo de manter o cache é maior que o cálculo em si. - Valores que mudam em toda renderização: Se uma dependência muda em todo ciclo, o
useMemonunca usará o cache e apenas adicionará sobrecarga.
Melhores Práticas
- Código Limpo: Tente primeiro escrever o código sem
useMemo. Só adicione se você notar problemas de performance ou se precisar garantir a identidade do objeto para evitar loops de renderização. - Não confie no useMemo para lógica semântica: O React pode descartar o cache por motivos de performance. Seu código deve funcionar corretamente mesmo que o cálculo seja refeito.