Skip to content

React Hooks explicados

Os hooks React usados no dia a dia, agrupados por função: guardar estado, correr efeitos, memoizar trabalho, partilhar contexto e alcançar o exterior do render. Cada linha emparelha o hook com a sua finalidade.

Um hook é uma função que deixa um componente de função aceder às funcionalidades do React: estado, ciclo de vida, contexto e afinação de desempenho. Duas regras: chame hooks no nível de topo (nunca dentro de ciclos ou condições) e chame-os apenas a partir de funções React. O resto é escolher o hook certo para cada tarefa.

Tabela de referência · 24 entradas
24 of 24 rows
Estado
Guarda um único valor que despoleta um novo render quando muda.Estado local do componente: campos de formulário, toggles, contadores.
Guarda estado dirigido por um reducer de ações, como uma pequena store.Estado com vários campos relacionados ou transições complexas.
Guarda um valor mutável que NÃO despoleta um novo render.Contentores mutáveis, timers e acesso direto ao DOM via .current.
Efeitos
Executa um efeito secundário após o render, com limpeza opcional.Buscar dados, subscrições e sincronização com um sistema externo.
A função que um efeito devolve corre antes do próximo efeito e de novo no unmount.Fechar subscrições e timers, ou abortar um fetch em curso.
Como useEffect, mas dispara de forma síncrona após a mutação do DOM.Ler ou escrever layout antes de o navegador pintar (toasts, tooltips).
Os event handlers correm em resposta a uma ação do utilizador; os efeitos correm após o render para sincronizar.Lógica causada pelo utilizador pertence a um handler; lógica causada pelo render pertence a um efeito.
Em desenvolvimento, monta os componentes duas vezes para os efeitos correrem, limparem e correrem de novo.Apanhar subscrições duplas e limpezas em falta antes da produção.
Desempenho
Guarda em cache um valor calculado até as dependências mudarem.Evitar recálculos caros entre renders; altere de propósito um valor nas deps para invalidar a cache.
Guarda em cache a referência de uma função até as dependências mudarem.Callbacks estáveis passados a filhos memoizados ou usados como deps.
Salta o re-render de um componente cujas props não mudaram.Componentes filhos pesados; passe uma função de comparação como segundo argumento quando a igualdade rasa não chega (um HOC, não um hook).
Contexto e handles externos
Lê um valor de contexto sem prop drilling.Tema, locale ou um utilizador autenticado partilhado pela árvore.
Personaliza a instância que um pai vê através de um ref.Expor uma API restrita a partir de um filho via forwardRef.
Concorrência e outros
Marca uma atualização de estado como não urgente para a UI manter-se responsiva.Manter a introdução fluida enquanto uma lista pesada re-renderiza.
Adia um valor para que as atualizações possam ser interrompidas.Fazer debounce de renders caros sem timers.
Gera um id único e estável para atributos de acessibilidade.Ligar label e input entre renders do servidor e do cliente.
Lê uma promise ou contexto durante o render; o único hook que pode ser chamado condicionalmente.Desembrulhar uma promise com Suspense, ou ler contexto dentro de um return antecipado.
Guarda estado dirigido por uma ação de formulário, com uma flag pending incluída.Submissões de formulário que devolvem erros ou estado atualizado para mostrar inline.
Renderiza um valor otimista de imediato e reverte para o estado real quando a ação assenta.Mostrar um like ou uma mensagem enviada enquanto o seu pedido ao servidor está em curso.
Lê o estado pending do <form> envolvente, sem props.Um botão de submissão que se desativa enquanto o formulário pai submete.
Subscreve uma store fora do React e lê um snapshot consistente.APIs do navegador como o estado online, ou stores de estado de terceiros.
Corre antes dos efeitos de layout, feito para injetar regras CSS-in-JS.Bibliotecas de estilos que têm de inserir regras antes de o layout ser lido.
Mostra uma etiqueta personalizada para o estado interno de um hook no React DevTools.Etiquetar o que um custom hook guarda durante a depuração.
O seu próprio hook que compõe os built-ins para partilhar lógica.Comportamento com estado reutilizável como useFetch ou useMediaQuery.