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

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

Vantagens do useState

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

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

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

Esses hooks complementam a lógica do React, permitindo criar componentes interativos e performáticos com um bom gerenciamento de estado e referências.