Um ref não serve só para o DOM: é uma caixa de nota adesiva que sobrevive a renderizações e serve a dados como ids de temporizador, o valor anterior ou uma flag de montado que muda sem que você queira uma re-renderização. É mais leve que state e mais seguro que uma variável de nível de módulo, porque cada instância de componente é isolada. Um ref é o lar certo para dados que descrevem o processo e não a interface: ele precisa sobreviver a uma renderização, mas nada na tela depende dele.
Grupo
Efeitos e Desempenho
Tipo
Padrã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
const timerRef = useRef(null)
timerRef.current = setInterval(...) // store
clearInterval(timerRef.current) // read
// the lazy initialization idiom:
if (ref.current === null) ref.current = expensiveInit()
Retorna:Sem valor de retorno; esta entrada descreve um padrão de codificação e não uma função.
▶ Exemplo
O exemplo roda direto: renderiza automaticamente ao expandir e edições valem na hora.
Saída:
Cada clique em +1 eleva o número em "Current" enquanto "previous" continua mostrando o valor de antes da mudança — o ref guarda um snapshot histórico sem causar renderizações extras.
💡 Dica Decida entre state e ref assim: se a UI tem de acompanhar o valor, use state; se for apenas dado de processo (um id de temporizador, um snapshot), use um ref.
ℹ️ Informação Um ref é mais seguro que uma variável de nível de módulo: várias instâncias do mesmo componente mantêm cada uma sua própria cópia e nunca se poluem mutuamente.
⚠️ Aviso Sob renderização concorrente, ref.current pode ser lido por outra renderização, então não trate um ref como a fonte de dados principal da renderização.
P Como escolho entre guardar um valor em um ref e em state?
R Conteúdo que afeta a renderização pertence a state; dados intermediários usados apenas em manipuladores de eventos e efeitos (ids, flags, snapshots) pertencem a um ref.
P Por que mudar ref.current não dispara uma renderização?
R O React só rastreia mudanças em state e props; um ref é um objeto mutável comum, então escrever nele é JavaScript puro e nunca entra no agendador de renderização.
P Posso escrever em um ref durante a renderização?
R Não, exceto para inicialização preguiçosa (if (ref.current === null)); faça a escrita em um manipulador de eventos ou em um useEffect.
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.