Rules of Hooks Regras dos Hooks

Última atualização: 2026-11-03

Rules of Hooks Regras dos Hooks

Os Hooks obedecem a duas regras de ferro: chame-os apenas no nível mais alto de um componente de função ou de um Hook personalizado, nunca dentro de um loop, de uma condição ou de uma função aninhada; e chame-os apenas a partir de funções do React, nunca de funções JavaScript comuns. O React associa cada Hook ao seu estado pela ordem de chamada, por isso, assim que a ordem muda, o estado se cruza entre as posições e a UI atualiza o valor errado.

GrupoRoteamento e Gerenciamento
TipoPadrão

ℹ️ Informação O editor transpila JSX para JavaScript e renderiza a UI real na sandbox; os componentes são montados automaticamente — sem render manual.

📝 Sintaxe

// ✅ Call unconditionally at the top level
function Counter() {
  const [n, setN] = useState(0)
  useEffect(() => { /* ... */ }, [])
  // ❌ Not allowed: if (n > 0) useEffect(...)
  // ❌ Not allowed: useState(0) inside a for loop
  return <button onClick={() => setN(n + 1)}>{n}</button>
}

Retorna:Sem valor de retorno; trata-se de um padrão de codificação, não de uma API chamável.

▶ Exemplo

O exemplo roda direto: renderiza automaticamente ao expandir e edições valem na hora.

Saída:

O painel lista duas regras ✓ e um contra-exemplo ✗; clicar nos botões atualiza a contagem e a caixa de seleção, e os Hooks continuam executando na mesma ordem fixa independentemente da interação, de modo que o estado nunca se cruza entre as posições.

💡 Pontos-chave

⚠️ Aviso Quebrar uma regra não gera erro imediato — surgem bugs estranhos como "clicar no botão A muda o valor de B"; o eslint-plugin-react-hooks os captura antes da build.
💡 Dica Um retorno antecipado deve vir após toda chamada de Hook; caso contrário, uma renderização pula um Hook e embaralha a ordem de chamada.
ℹ️ Informação O React Compiler pode otimizar componentes em tempo de build, mas as duas regras continuam sendo a pré-condição para que ele funcione.
Mais casos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

P Por que um Hook não pode ser chamado dentro de uma condição?
R O React emparelha cada Hook com seu estado pela ordem de chamada; uma chamada condicional faz a ordem derivar e o n-ésimo Hook acaba lendo o estado de outra pessoa.
P Um Hook personalizado pode chamar outros Hooks?
R Sim, para isso serve exatamente um Hook personalizado — uma função cujo nome começa com use segue as mesmas regras de chamada no nível mais alto dentro do seu corpo.
P Um componente pode retornar antes de chamar seus Hooks?
R Não. Ou mova os Hooks acima do return, ou extraia o JSX que vem depois do return para um componente filho, para que todo Hook seja executado em cada renderização.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%