Quando o estado muda, o React executa de novo a função do componente para produzir uma nova árvore de elementos e compara essa árvore com a anterior. Ele compara tipos de nó e keys posição por posição: o mesmo tipo significa que o React atualiza as props no lugar, um tipo diferente significa que ele desmonta a subárvore antiga e monta uma nova. Só o conjunto mínimo de mudanças resultante é aplicado no DOM real.
Por que os entrevistadores perguntam isso
Isso separa quem decorou a sintaxe dos hooks de quem entende o modelo por baixo dela. O entrevistador quer ouvir que você sabe que renderizar não é a mesma coisa que aplicar no DOM, que o tipo do elemento e a key guiam o diff, e que isso explica bugs reais como estado sendo resetado quando um componente muda de lugar na árvore. Também prepara o terreno para perguntas de acompanhamento sobre memoização e performance.
Como estruturar sua resposta
- Separe a fase de render da fase de commit já na primeira frase.
- Explique as regras do diff: mesmo tipo atualiza no lugar, tipo diferente remonta.
- Diga o que as keys fazem e por que elas importam em listas.
- Termine numa consequência real, como a perda de estado quando uma subárvore remonta.
Exemplo de resposta
Então, quando o estado muda, o React chama a função do componente de novo, e isso gera uma nova árvore de elementos. Essa é a fase de render, e nada tocou no DOM ainda. Depois ele percorre a árvore nova contra a antiga. Em cada posição ele olha primeiro para o tipo do elemento. Se for o mesmo tipo, digamos uma div que continua div, ele mantém o nó do DOM existente e o estado existente e só aplica as props que mudaram. Se o tipo for diferente, ele joga a subárvore inteira fora e constrói uma nova, o que significa que qualquer estado lá dentro se perdeu. Em listas ele usa keys em vez da posição pura, então os itens podem se mover sem serem reconstruídos. Aí todas as mudanças coletadas são aplicadas em uma única passada de commit. O motivo de eu me importar com isso na prática é que uma vez eu depurei um formulário que se resetava a cada tecla digitada, e era porque o pai renderizava ele dentro de um condicional que trocava o tipo do elemento do wrapper. Quando você conhece as regras do diff, isso vira um conserto de cinco minutos em vez de uma tarde inteira.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que acontece com o estado do componente quando o tipo do elemento muda na mesma posição?
- Como o React agrupa várias atualizações de estado dentro de um mesmo event handler?
- Em que ponto o React Compiler muda alguma coisa disso?
Mais perguntas para Desenvolvedor React
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas