As keys dizem ao React qual elemento da lista nova corresponde a qual da lista antiga, para que ele possa mover, manter ou remover nós do DOM e o estado deles em vez de casar apenas pela posição. Índices de array só funcionam para listas estáticas. Se os itens forem reordenados, inseridos no começo ou removidos, o índice de um item muda, o React reaproveita o nó errado, e estado como o valor de um input vai parar na linha errada.
Por que os entrevistadores perguntam isso
Parece pergunta de iniciante, mas as respostas separam as pessoas rápido. A maioria dos candidatos diz que keys ajudam na performance e para por aí. O entrevistador quer ouvir que keys são sobre identidade e preservação de estado, não só velocidade, e que você sabe nomear o modo de falha concreto com keys de índice. Também é um teste rápido de se você já depurou um bug real de lista ou só limpou um aviso do console.
Como estruturar sua resposta
- Defina key como identidade, não como dica de performance.
- Explique como o diff pareia filhos antigos e novos pela key.
- Dê o bug concreto do índice numa lista reordenada ou filtrada.
- Diga o que você usa como key e o que você evita.
Exemplo de resposta
Uma key é como o React responde à pergunta: esse é o mesmo item que eu vi no render passado. Sem ela, ele pareia os filhos por posição, então quando uma linha se move o React acha que o conteúdo mudou e aplica patch no nó existente em vez de movê-lo. Com uma key estável ele sabe que o item se moveu, mantém o nó do DOM e o estado dele, e reordena. A armadilha do índice é que o índice descreve a posição, não o item. Eu peguei isso numa tabela onde cada linha tinha um checkbox e um campo de notas. Apague a linha dois e todas as linhas abaixo sobem um índice, então o React pareia os nós errados e você acaba com as notas de outra pessoa na sua linha. Parece bug de dados e é bug de key. Então eu uso qualquer id estável que venha com os dados, normalmente o id do banco. Se realmente não existir um, eu gero um id quando o item é criado, e não durante o render, porque gerar no render te dá uma key nova a cada passada e remonta a lista 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
- Quando usar o índice do array como key é aceitável de verdade?
- O que acontece se dois irmãos tiverem a mesma key?
- Como você resetaria de propósito o estado de um componente usando uma key?
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