Pergunta de entrevista para Desenvolvedor React

Quais são as características de performance do React Context, e como você impede que ele re-renderize metade da aplicação?

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

Resposta rápida

Todo consumidor re-renderiza quando o valor do provider muda por referência, não importa qual parte do valor ele lê, porque context não tem seletor. Um provider segurando um objeto grande construído do zero a cada render vai, portanto, re-renderizar todos os consumidores o tempo todo. Conserte memoizando o valor, separando estado e dispatch em contexts diferentes, ou guardando os dados numa store externa que os consumidores assinam com seletores.

Por que os entrevistadores perguntam isso

Context é a API mais mal usada do React, então o entrevistador quer saber se você já sentiu a dor. Ele está ouvindo pelo fato de que não existe assinatura parcial, e por mitigações práticas em vez de uma regra geral contra context. Mencionar useSyncExternalStore ou uma biblioteca de store pequena mostra que você sabe o ponto em que context deixa de ser a ferramenta certa.

Como estruturar sua resposta

  • Enuncie a regra: qualquer mudança de valor re-renderiza todos os consumidores.
  • Explique o porquê, não há seletor e a comparação é por referência.
  • Liste os consertos em ordem: memoizar, separar, depois migrar para uma store.
  • Diga em que context é genuinamente bom, como configuração estável.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Context é primeiro um mecanismo de injeção de dependência e um gerenciador de estado num distante segundo lugar. O problema de performance é que os consumidores assinam o valor inteiro, então quando o value do provider muda de identidade, todo consumidor abaixo dele renderiza, até um que só lê um booleano. A primeira coisa que eu checo é se o provider está construindo um objeto novo inline no JSX, porque isso é uma referência nova a cada render do pai e anula tudo. Depois disso eu separo os contexts, porque normalmente os dados mudam com frequência e os setters nunca mudam, então colocar o dispatch no próprio context corta a maior parte da agitação. Se eu ainda preciso de seletores, eu paro de fingir que context é uma store e coloco o estado numa store de verdade, aí assino com useSyncExternalStore ou uma biblioteca para cada componente pegar a fatia dele. Onde context continua excelente é em coisas estáveis: tema, usuário atual, um locale, uma instância de client. Essas mudam quase nunca, então o custo de re-render é irrelevante.

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 o useSyncExternalStore evita o problema de re-render?
  • O que acontece com providers aninhados do mesmo context?
  • Você usaria context para estado de formulário? Por que não?

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