Pergunta de entrevista para Desenvolvedor React

Como funciona o array de dependências do useEffect, e o que costuma dar errado com ele?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

O React compara cada dependência com o valor dela do render anterior usando Object.is e só executa o efeito de novo se alguma mudou. Um array vazio significa rodar uma vez depois da montagem; omitir o array significa rodar depois de todo render. Dá errado quando você deixa uma dependência de fora e captura um valor obsoleto, ou quando você inclui um objeto ou função recriados a cada render, o que faz o efeito entrar em loop infinito.

Por que os entrevistadores perguntam isso

É nos efeitos que mora a maioria dos bugs de React, então o entrevistador está sondando se você entende closures e snapshots de render em vez de tratar o array como um encantamento mágico. Ele quer ouvir que você não silencia a regra do lint, que você sabe nomear a diferença entre uma closure obsoleta e um loop infinito, e de preferência que você questiona se o efeito precisa existir.

Como estruturar sua resposta

  • Explique a comparação e quando o efeito de fato roda de novo.
  • Descreva as duas falhas clássicas: closure obsoleta e loop de render.
  • Diga como você conserta cada uma, com updates funcionais, refs ou içando valores para fora.
  • Termine questionando se o efeito deveria estar ali.

Exemplo de resposta

Exemplo falado, em primeira pessoa

O React guarda o array do último render e compara item por item com Object.is. Se tudo bater, ele pula o efeito; se algo diferir, ele roda o cleanup do antigo e depois o novo. O detalhe é que o efeito fecha sobre as props e o estado do render que o criou, então se eu deixo algo de fora do array eu fico com um valor obsoleto que envelhece em silêncio. O outro lado disso é colocar um objeto ou uma arrow function ali dentro, porque essas são referências novas a cada render, então o efeito roda em loop. Meus consertos de sempre são updates de estado funcionais, para eu não precisar do valor atual como dependência, içar constantes para fora do componente, e só embrulhar um callback quando ele realmente precisa ser dependência. Sinceramente, porém, a primeira pergunta que eu faço é se o efeito deveria existir. A maioria dos efeitos que eu já deletei calculava estado derivado, o que é só uma conta durante o render, ou buscava dados que pertenciam ao router ou a uma biblioteca de query.

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 funciona

Perguntas de acompanhamento que você pode esperar

  • Como você lida com um efeito que precisa do valor mais recente mas não deveria rodar de novo quando ele muda?
  • Quando você usaria useLayoutEffect no lugar?
  • O que roda primeiro, o cleanup do efeito antigo ou o efeito novo?

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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot