Chame hooks só no nível mais alto de um componente ou de outro hook, nunca dentro de uma condição, laço ou callback aninhado, e só a partir de funções React. O motivo é que o React guarda o estado dos hooks como uma lista ordenada na fiber e casa cada chamada com um slot pela ordem de chamada, não pelo nome. Mude a ordem entre renders e todo hook depois daquele ponto lê o slot errado.
Por que os entrevistadores perguntam isso
As regras são fáceis de recitar, então o que o entrevistador está pedindo mesmo é o porquê. Um candidato que explica a lista ordenada de slots entende a implementação e vai raciocinar direito sobre hooks customizados, lógica condicional e supressões de lint. Também abre um follow up natural sobre como você estrutura o código quando só às vezes precisa de algo, que é onde candidatos mais fracos começam a escrever hooks dentro de blocos if.
Como estruturar sua resposta
- Enuncie as duas regras de forma direta e curta.
- Explique o mecanismo de slots por ordem de chamada como o motivo.
- Descreva o que de fato quebra quando a ordem muda.
- Diga como você lida com necessidades condicionais sem quebrar as regras.
Exemplo de resposta
Duas regras: hooks ficam no nível mais alto, e só são chamados de dentro de um componente ou de outro hook. O motivo é a implementação. O React não sabe o nome dos seus hooks, ele mantém uma lista na fiber e move um cursor por ela enquanto sua função roda, então a primeira chamada de useState pega o slot um, a segunda pega o slot dois, e assim por diante. Se você embrulhar um hook num if, em alguns renders o cursor cai uma posição fora, e todo hook depois daquele lê o estado do hook anterior. Você ganha falhas bizarras onde um booleano vira uma função. Quando eu preciso de algo condicionalmente, eu sempre chamo o hook e faço o próprio hook não fazer nada, por exemplo passando uma flag enabled para um hook de query, ou empurrando o desvio um nível acima para que os dois caminhos sejam componentes separados. Eu mantenho as regras do eslint ligadas e trato uma supressão como algo que precisa de um comentário explicando exatamente o porquê.
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
- Como você lidaria com um hook de que você só precisa às vezes?
- O que o plugin do eslint de fato pega, e o que ele deixa passar?
- Como você escreveria um hook customizado que compõe outros dois hooks?
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