Event delegation significa anexar um único listener a um ancestral comum e usar event.target para descobrir com qual descendente houve interação. Funciona porque a maioria dos eventos borbulha do alvo pelos seus ancestrais. Use em listas que mudam com frequência ou que são grandes, já que você evita anexar e limpar centenas de listeners. Não use para eventos que não borbulham, como focus, blur e a maioria dos eventos de mídia.
Por que os entrevistadores perguntam isso
É uma checagem rápida de se você entende as fases de captura e borbulhamento em vez de só chamar addEventListener de cabeça. O entrevistador também sonda higiene de memória: candidatos que já depuraram listeners vazando numa single page app sabem por que delegation importa. As perguntas de acompanhamento costumam ir para eventos que não borbulham, mau uso de stopPropagation e como frameworks implementam a própria delegation sintética em cima disso.
Como estruturar sua resposta
- Defina em uma frase usando bubbling e event.target.
- Nomeie o ganho concreto: menos listeners, funciona para elementos adicionados depois.
- Sinalize as exceções, incluindo eventos que não borbulham.
- Alerte que stopPropagation quebra a delegation acima.
Exemplo de resposta
Em vez de colocar um listener de clique em cada linha, coloco um no container e leio event.target, depois subo com closest para achar a linha que me interessa. Funciona porque o clique borbulha do que foi realmente clicado pelos ancestrais, então o container enxerga tudo abaixo dele. Os dois ganhos são que não estou criando e destruindo centenas de listeners, e que linhas adicionadas depois simplesmente funcionam sem rebind. As pegadinhas valem ser ditas: focus e blur não borbulham, então uso focusin e focusout para esses, e se algum código entre o alvo e o meu container chamar stopPropagation, meu handler para de disparar silenciosamente, o que é um bug genuinamente chato de rastrear. Peguei isso principalmente numa tabela em que um componente interno parava a propagação para fechar o próprio menu e matava a seleção de linha sem alarde. Hoje em dia normalmente ganho delegation de graça do framework, mas ainda uso direto em listas grandes virtualizadas e em qualquer coisa renderizada fora da árvore do framework.
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
- Quais eventos comuns não borbulham, e o que você usa no lugar?
- Como você trataria um clique num elemento aninhado dentro da linha?
- Quando stopPropagation é a escolha certa em vez de um cheiro de código?
Mais perguntas para Desenvolvedor Frontend
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