09 - useState e useRef¶
No React, useState e useRef são hooks que ajudam a gerenciar e manipular o estado e referências de um componente funcional. Eles têm finalidades diferentes, mas ambos são essenciais para construir interfaces dinâmicas.
1. useState¶
O hook useState é usado para adicionar e manipular estados em componentes funcionais. O React monitora as mudanças de estado e, quando elas ocorrem, re-renderiza o componente para refletir o novo estado.
Como useState Funciona¶
- Ao declarar uma variável de estado com
useState, ela retorna um array com dois elementos: - O valor atual do estado.
- Uma função que permite atualizar o valor do estado.
Exemplo Simples¶
Aqui, useState é usado para controlar o número de cliques em um botão:
import React, { useState } from 'react';
function Contador() {
const [contador, setContador] = useState(0);
const incrementar = () => {
setContador(contador + 1);
};
return (
<div>
<p>Você clicou {contador} vezes</p>
<button onClick={incrementar}>Clique aqui</button>
</div>
);
}
export default Contador;
Explicação¶
- Valor Inicial:
useState(0)definecontadorcom o valor inicial de0. - Atualização de Estado:
setContador(contador + 1)incrementa o valor decontadorem 1 cada vez que o botão é clicado. - Re-renderização: Toda vez que
contadoré atualizado, o React re-renderiza o componente para refletir a nova contagem.
Vantagens do useState¶
- Reatividade: Garante que o componente sempre mostre o estado mais recente.
- Controle Total: Ideal para variáveis que afetam a renderização e a interface, como valores de input, exibições de mensagens, entre outros.
2. useRef¶
O hook useRef é usado para criar uma referência mutável que persiste entre renderizações de um componente, mas não provoca re-renderização quando atualizado. Isso é útil para manipular elementos do DOM diretamente ou para armazenar valores que não precisam desencadear uma re-renderização.
Como useRef Funciona¶
useRefretorna um objeto com uma propriedade.current, que é inicializada com o valor passado como argumento e que pode ser atualizado sem afetar a renderização do componente.
Exemplo com useRef¶
Aqui está um exemplo em que useRef é usado para referenciar um campo de entrada:
import React, { useRef } from 'react';
function FocoInput() {
const inputRef = useRef(null);
const focarInput = () => {
inputRef.current.focus();
};
return (
<div>
<input ref={inputRef} type="text" placeholder="Clique para focar" />
<button onClick={focarInput}>Focar no input</button>
</div>
);
}
export default FocoInput;
Explicação¶
- Referência ao DOM:
useRef(null)cria uma referência vazia.inputRef.currenté associado ao campo de entrada comref={inputRef}. - Manipulação Direta do DOM:
inputRef.current.focus()permite que o botão “Focar no input” posicione o cursor no campo de entrada.
Diferença entre useState e useRef¶
| Característica | useState | useRef |
|---|---|---|
| Provoca re-renderização | Sim, ao atualizar o estado | Não, as mudanças em .current não causam render |
| Finalidade | Gerenciar dados que afetam a renderização | Referenciar elementos do DOM ou armazenar dados temporários |
| Persistência | Entre re-renderizações | Entre re-renderizações |
| Uso comum | Campos de formulário, contadores, flags | Foco em elementos, armazenar IDs de intervalos, variáveis imutáveis |
Quando Usar Cada Um¶
useStateé ideal para dados que impactam a interface e exigem uma atualização visível.useRefé útil para manipulação direta de elementos DOM ou armazenamento de dados que não devem afetar a renderização.
Esses hooks complementam a lógica do React, permitindo criar componentes interativos e performáticos com um bom gerenciamento de estado e referências.