Sobes.tech
Junior

O que é delegação?

sobes.tech IA

Resposta da IA

A delegação de eventos é um padrão de design que permite a um único manipulador de eventos gerir os eventos de múltiplos elementos filhos. Em vez de atribuir um manipulador a cada elemento, o manipulador é atribuído ao elemento pai. Quando ocorre um evento num elemento filho, este "sobe" (bubbling) até ao pai, onde o manipulador pode interceptá-lo e processá-lo.

Princípio de funcionamento:

  • O evento é gerado no elemento alvo (por exemplo, <button>).
  • O evento propaga-se para cima na árvore DOM até aos elementos pais.
  • O manipulador de eventos, ligado ao elemento pai, intercepta o evento.
  • No manipulador, pode-se determinar em qual elemento filho ocorreu o evento usando event.target.

Vantagens:

  • Performance: Menos manipuladores de eventos, o que reduz o consumo de memória e CPU, especialmente para listas ou tabelas grandes.
  • Facilidade de gestão: É mais fácil adicionar e remover elementos do DOM, pois não é necessário ligar/desligar manipuladores constantemente.
  • Limpeza do código: Menos código repetitivo para ligar manipuladores.

Exemplo:

Suponha que temos uma lista de elementos e queremos reagir a cliques em cada um.

Sem delegação, teríamos que ligar um manipulador a cada <li>:

// Obter todos os elementos <li>
const listItems = document.querySelectorAll('li');

// Ligar um manipulador a cada elemento
listItems.forEach(item => {
    item.addEventListener('click', function() {
        console.log('Clicado em:', this.textContent);
    });
});

Com delegação, ligamos o manipulador apenas ao <ul>:

// Obter a lista pai
const list = document.querySelector('ul');

// Ligar o manipulador à lista
list.addEventListener('click', function(event) {
    // Verificar se o clique foi num elemento <li>
    if (event.target.tagName === 'LI') {
        console.log('Clicado em:', event.target.textContent);
    }
});

Neste exemplo, usamos event.target para determinar qual <li> foi clicado.