useLayoutEffect para medições antes da animação
Use useLayoutEffect para medir as dimensões dos elementos antes do início das animações e evitar saltos no layout.
useLayoutEffect para medições antes da animação é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
O problema do piscar
Às vezes, um elemento salta ou pisca visivelmente na primeira renderização antes de se acomodar no lugar. Isso geralmente acontece quando você mede ou reposiciona um elemento depois que o navegador já o desenhou.
O usuário vê a posição incorreta por um quadro e, em seguida, uma correção repentina, o que faz tudo parecer errado.
Por que useEffect causa o piscar
useEffect é executado depois que o navegador desenha a tela. Portanto, se você ler uma medida e atualizar o DOM dentro de useEffect, o usuário já terá visto o quadro sem correção antes que sua alteração seja aplicada.
Para um posicionamento visual que precisa ser invisível ao usuário, executar o código depois da renderização é tarde demais.
useLayoutEffect é executado antes da renderização
useLayoutEffect é executado de forma síncrona depois que o React modifica o DOM, mas antes que o navegador desenhe a tela. Qualquer leitura ou escrita do DOM feita ali é aplicada antes que o usuário veja um único quadro.
Isso faz dele a ferramenta adequada para medições e posicionamentos que precisam aparecer corretos instantaneamente.
Medindo a posição inicial
Dentro de useLayoutEffect, você pode ler a posição e as dimensões de um elemento com ref.current.getBoundingClientRect() para registrar sua posição e seu tamanho antes de animá-lo.
Como isso é executado antes da renderização, você pode medir o elemento e aplicar uma transformação inicial sem nenhum piscar visível.
A técnica FLIP
FLIP significa Primeiro, Último, Inverter e Reproduzir. Você registra a posição inicial do elemento, deixa que ele se mova para a posição final, depois o inverte aplicando uma transformação que o coloca visualmente de volta na posição inicial e, por fim, reproduz a animação removendo a transformação para que ele se mova até a posição final.
Isso permite animar alterações de disposição usando apenas uma transform de baixo custo, mesmo que a disposição real tenha mudado instantaneamente.
getBoundingClientRect em useLayoutEffect
As leituras principais ocorrem em useLayoutEffect: registre o retângulo inicial antes da alteração e o retângulo final depois dela, depois calcule a variação. Fazer isso antes da renderização garante que a transformação inversa esteja aplicada antes que qualquer coisa seja exibida.
A diferença entre os dois retângulos fornece a translação e a escala exatas para fazer a inversão.
Aplicando a transformação de forma síncrona
Você define a transformação inversora de forma síncrona dentro de useLayoutEffect e, no quadro seguinte, remove-a para que o elemento seja animado até sua posição natural. Muitas vezes, você aciona a etapa de reprodução com requestAnimationFrame.
Como a inversão foi aplicada antes da renderização, o usuário nunca vê o elemento em sua posição final bruta.
O aviso de SSR
No servidor não existe DOM, então o React registra um aviso informando que useLayoutEffect não faz nada durante a renderização no servidor. Os efeitos relacionados à disposição visual só fazem sentido no navegador.
Esse aviso indica que o efeito não pode ser executado onde não há nada para medir.
Alternativa segura para SSR
Se um componente precisar ser executado no servidor, use useEffect combinado com requestAnimationFrame para fazer a medição antes da próxima renderização, ou use useLayoutEffect condicionalmente apenas no navegador.
Isso evita o aviso e ainda proporciona um momento próximo da renderização para animações não críticas.
Exemplo de acordeão expansível
Uma animação de altura é um caso clássico: meça as alturas nos estados recolhido e expandido em useLayoutEffect e, em seguida, anime entre valores explícitos em pixels para que a transição seja suave.
Como a altura auto não pode ser animada, medir a altura real primeiro permite fazer a transição até um valor concreto.
Quando recorrer a useLayoutEffect
Prefira useEffect na maior parte dos casos. Use useLayoutEffect apenas quando ler a disposição visual e modificar o DOM antes da renderização for necessário para evitar um piscar visível.
Usá-lo em excesso pode prejudicar o desempenho, pois bloqueia a renderização até terminar.
Verificação rápida
Teste sua compreensão sobre o momento de execução dos efeitos.
Recapitulação
Você aprendeu que o problema do piscar ocorre por medir depois da renderização, que useLayoutEffect é executado antes dela e como a técnica FLIP anima alterações de disposição usando transformações de baixo custo.
Você também viu o aviso de SSR e uma alternativa com useEffect e requestAnimationFrame.
Perguntas Frequentes
A aula “useLayoutEffect para medições antes da animação” é grátis?
Sim — o texto completo de “useLayoutEffect para medições antes da animação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “useLayoutEffect para medições antes da animação”?
Use useLayoutEffect para medir as dimensões dos elementos antes do início das animações e evitar saltos no layout. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “useLayoutEffect para medições antes da animação”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Transições CSS com Alterações de Estado do React
- Animações de @keyframes CSS com React
- useLayoutEffect para medições antes da animação
- Animações de entrada e saída sem biblioteca