0Pricing
HTML Academy · Aula

Atributos observados e attributeChangedCallback

Reaja a alterações de atributos HTML em elementos personalizados.

Atributos observados e attributeChangedCallback é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Reagindo a mudanças nos atributos

Os elementos HTML expõem seu estado por meio de atributos. Para reagir quando <my-card name="A"> se torna name="B", declare a lista de atributos observados e implemente attributeChangedCallback na classe.

observedAttributes estático

Declare os atributos relevantes por meio de um acessador estático: static get observedAttributes() { return ["name", "open"]; }. Somente os atributos dessa lista acionam o retorno de chamada; os demais são ignorados para melhorar o desempenho.

class MyCard extends HTMLElement {
  static get observedAttributes() { return ["name", "open"]; }
}

A assinatura do retorno de chamada

attributeChangedCallback(name, oldValue, newValue) é acionado para cada mudança em um atributo observado. Os três parâmetros são cadeias de caracteres, ou nulos se o atributo estiver ausente. Use-os para atualizar o estado interno e executar o render.

attributeChangedCallback(name, oldValue, newValue) {
  if (oldValue === newValue) return;
  if (name === "name") this.render();
  if (name === "open") this.toggle(newValue !== null);
}

É acionado para atributos iniciais

O retorno de chamada é acionado uma vez para cada atributo observado que está presente quando o elemento é atualizado. Isso significa que um render em attributeChangedCallback trata tanto dos renders iniciais quanto dos posteriores, sem exigir um caminho separado em connectedCallback.

Reflexão entre propriedade e atributo

Para atributos booleanos, espelhe a propriedade no atributo e vice-versa: definir element.open = true deve definir o atributo open, e remover o atributo deve limpar a propriedade. Esse comportamento corresponde ao de elementos nativos como <details>.

get open() { return this.hasAttribute("open"); }
set open(value) {
  if (value) this.setAttribute("open", "");
  else this.removeAttribute("open");
}

Evite loops infinitos

Se attributeChangedCallback definir atributos que ele observa, o código poderá entrar em um loop infinito. Sempre proteja o código com if (oldValue === newValue) return; no início do retorno de chamada e evite alterar atributos observados dentro dele.

Atributos booleanos

Por convenção do HTML, os atributos booleanos são “definidos” pela presença (disabled, open) e “não definidos” pela ausência. O valor deles é ignorado — disabled="false" ainda significa que o elemento está desativado. Verifique a presença com hasAttribute; nunca compare a cadeia de caracteres.

JSON nos atributos

Os atributos são cadeias de caracteres. Para passar dados estruturados, use JSON.stringify na marcação e faça a análise em attributeChangedCallback: <my-chart data-points='[1,2,3]'>. Para grandes volumes de dados, prefira passá-los por meio da atribuição de uma propriedade JS.

Comparação com MutationObserver

O senhor poderia observar mudanças nos atributos com um MutationObserver, mas observedAttributes + attributeChangedCallback é mais rápido, pois não exige a configuração de um observador, é declarativo, já que a lista de nomes observados fica visível na classe, e segue o padrão dos componentes web.

Desempenho: agrupe os renders

Vários atributos alterados em rápida sucessão acionariam vários retornos de chamada e vários renders. Agrupe-os com queueMicrotask ou requestAnimationFrame para que o render real seja executado uma vez por microtarefa ou quadro, independentemente de quantos atributos tenham mudado.

Armadilha comum

Esquecer de adicionar um atributo a observedAttributes desativa silenciosamente o retorno de chamada para esse atributo. Se o componente não reagir a uma chamada de setAttribute, a primeira coisa a verificar é a lista de observedAttributes estáticos.

Verificação de conhecimentos

O que acontece se o senhor chamar attributeChangedCallback indiretamente ao definir um atributo observado dentro do próprio retorno de chamada?

Resumo

Declare quais atributos devem ser acompanhados por meio do acessador estático observedAttributes; attributeChangedCallback(name, oldValue, newValue) é acionado para cada mudança, inclusive durante a análise inicial. Espelhe propriedades em atributos para estados booleanos, evite loops infinitos e agrupe os renders com requestAnimationFrame para melhorar o desempenho.

Perguntas Frequentes

A aula “Atributos observados e attributeChangedCallback” é grátis?

Sim — o texto completo de “Atributos observados e attributeChangedCallback” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Atributos observados e attributeChangedCallback”?

Reaja a alterações de atributos HTML em elementos personalizados. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Atributos observados e attributeChangedCallback”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Definindo elementos com customElements.define
  2. connectedCallback e disconnectedCallback
  3. Atributos observados e attributeChangedCallback
  4. Estendendo elementos integrados
← Voltar para HTML Academy