A fase de renderização e o commit no DOM
Acompanhe o ciclo de renderização do React, da avaliação de JSX à reconciliação e à etapa de pintura do navegador.
A fase de renderização e o commit no DOM é uma aula grátis de React Academy no CoddyKit. Esta é a aula 1 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.
Visão geral do ciclo de trabalho do React
O ciclo de trabalho do React tem duas fases principais: a fase de renderização e a fase de confirmação. Durante a fase de renderização, o React chama as funções dos seus componentes e cria uma representação virtual da interface (a árvore de fibras). Durante a fase de confirmação, o React aplica as alterações da árvore de fibras ao DOM real.
A fase de renderização pode ser interrompida
No Modo concorrente do React 18, a fase de renderização pode ser pausada, interrompida ou reiniciada. O React pode chamar sua função de componente várias vezes antes de confirmar qualquer alteração. Por isso, as funções de componentes devem ser puras: elas não podem ter efeitos colaterais, pois a função pode ser executada mais de uma vez para uma única atualização visível.
A fase de confirmação é sempre síncrona
Ao contrário da fase de renderização, a fase de confirmação é sempre síncrona e é executada até o fim. O React não pode ser interrompido enquanto confirma alterações no DOM. Isso garante que o DOM nunca fique em um estado parcialmente atualizado. Os usuários sempre veem uma interface totalmente consistente após cada confirmação.
As três subfases da confirmação
A fase de confirmação tem três subfases: antes da mutação (o componente de classe getSnapshotBeforeUpdate é executado aqui para ler valores do DOM antes das alterações), mutação (o React insere, atualiza e remove nós do DOM) e disposição (os efeitos síncronos são executados aqui, especificamente useLayoutEffect e componentDidMount/componentDidUpdate do componente de classe).
Efeitos passivos: useEffect
useEffect é um efeito passivo, isto é, não é executado durante a fase de confirmação. Depois que a fase de confirmação termina e o navegador desenha a tela, o React agenda os efeitos passivos de forma assíncrona. Eles são executados depois que o navegador tem a oportunidade de renderizar o DOM atualizado na tela.
Momento da pintura do navegador
O navegador desenha a tela entre a fase de disposição (na qual useLayoutEffect é executado) e a fase de efeitos passivos (na qual useEffect é executado). Esta é a diferença crucial de momento: useLayoutEffect é executado antes da pintura, e useEffect é executado depois dela. Para efeitos que alteram a saída visual, essa distinção é muito importante.
Por que useEffect pode causar uma atualização visual dupla
Se um useEffect lê o DOM e atualiza o estado (por exemplo, medindo um elemento e definindo um estado de tamanho), o React renderiza novamente e confirma as alterações. O navegador desenha a tela duas vezes: uma vez com o tamanho inicial e outra com o tamanho corrigido. Os usuários podem ver uma breve exibição do tamanho incorreto antes que a correção apareça.
A árvore de fibras
React constrói internamente uma árvore de nós de "fibra", um para cada instância de componente. Cada fibra armazena o estado, os efeitos e a saída do componente. Durante a fase de renderização, React cria uma nova árvore de fibras de trabalho em andamento. Durante a fase de confirmação, a árvore de trabalho em andamento se torna a árvore atual, e a árvore antiga é reutilizada.
Dupla invocação no modo estrito
No modo estrito do React, as funções dos componentes e os efeitos são intencionalmente executados duas vezes durante o desenvolvimento para ajudar a detectar efeitos colaterais. Tanto useLayoutEffect quanto useEffect são montados, desmontados e montados novamente. Essa dupla invocação não ocorre em produção. Ela foi projetada para revelar erros em que os efeitos não são devidamente limpos.
Por que as funções dos componentes precisam ser puras
Como a fase de renderização pode ser interrompida e executada novamente, as funções dos componentes precisam produzir a mesma saída para as mesmas entradas, sem efeitos colaterais. Mutações, assinaturas e chamadas de API no corpo da função, e não nos efeitos, serão executadas mais vezes do que o esperado no modo concorrente, causando erros.
Leitura do DOM na renderização e nos efeitos
Nunca leia propriedades do DOM diretamente dentro do corpo da função do componente. O DOM pode ainda não existir durante a renderização no servidor ou pode estar desatualizado durante novas renderizações. Leia sempre o DOM dentro de useLayoutEffect, para leituras antes da pintura, ou de useEffect, para leituras depois da pintura, quando há garantia de que o DOM está atualizado.
Subfases da fase de confirmação do React
Em qual subfase da fase de confirmação do React useLayoutEffect é executado?
Recapitulação da lição: fase de renderização e confirmação do DOM
A fase de renderização do React constrói a árvore de fibras e pode ser interrompida; a fase de confirmação aplica as alterações ao DOM e é sempre síncrona. A confirmação tem três subfases: antes da mutação, mutação e disposição. useLayoutEffect é executado na fase de disposição, antes da pintura. useEffect é executado como um efeito passivo depois da pintura.
Perguntas Frequentes
A aula “A fase de renderização e o commit no DOM” é grátis?
Sim — o texto completo de “A fase de renderização e o commit no DOM” é 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 “A fase de renderização e o commit no DOM”?
Acompanhe o ciclo de renderização do React, da avaliação de JSX à reconciliação e à etapa de pintura do navegador. 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 1 de 4.
Quanto tempo leva a aula “A fase de renderização e o commit no DOM”?
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
- A fase de renderização e o commit no DOM
- Quando useLayoutEffect é executado em comparação com useEffect
- Medindo elementos do DOM com useLayoutEffect
- Evitando sobrecarga de layout e tremulação visual