DEV Community

Cover image for Decorator @define: O Feitiço supremo para turbinar seus Custom Elements!
<deMGoncalves />
<deMGoncalves />

Posted on

Decorator @define: O Feitiço supremo para turbinar seus Custom Elements!

E aí, galera dev! Prontos pra uma magia mais poderosa que um loop infinito de café? ☕ Hoje vamos desvendar o segredo dos mestres Jedi do front-end: o decorator @define. Preparem-se para códigos tão lindos que vão fazer até o Linus Torvalds chorar de emoção! 😢

🎭 O que é esse tal de @define?

Imagine só: e se você pudesse definir Custom Elements com o mesmo swag que o Tony Stark veste a armadura do Homem de Ferro? Pois é, meus caros Padawans do JavaScript, o @define é exatamente isso!

import { define } from '@bake-js/-o-id';

@define('botao-camaleao')
class BotaoCamaleao extends HTMLElement {
  // Código mágico aqui
}
Enter fullscreen mode Exit fullscreen mode

Simples assim! Mais fácil que achar um ';' perdido no código, não é mesmo? 😉

🧠 Como Funciona essa Bruxaria?

Vamos dar uma espiada nos bastidores dessa mágica:

const define = (name, options) => (constructor) => {
  customElements.get(name) ?? customElements.define(name, constructor, options);
};
Enter fullscreen mode Exit fullscreen mode

Esse pedacinho de código é mais esperto que um if...else numa sexta-feira à tarde:

  1. Ele verifica se o elemento já existe (nada de definir o mesmo elemento 500 vezes, né?).
  2. Se não existir, BAM! Define o elemento na hora, sem dar chance pro garbage collector pensar duas vezes.

🚀 Por que isso é mais revolucionário que a invenção do ctrl+c ctrl+v?

  1. DRY como o deserto do Saara: Nada de repetir customElements.define toda hora. Seu código fica mais seco que piada de padeiro!

  2. Sintaxe açucarada: É tipo colocar Nutella no seu JavaScript. Fica irresistível!

  3. Organização nível Marie Kondo: Mantém a definição do elemento junto da classe. Satisfaction 100%!

  4. Flexibilidade de ninja: Quer estender elementos nativos? É só passar as options:

   @define('super-button', { extends: 'button' })
   class SuperButton extends HTMLButtonElement {
     // Código supimpa aqui
   }
Enter fullscreen mode Exit fullscreen mode

🛠️ Como Usar Esse Poder Na Sua App

  1. Primeiro, instale a lib dos deuses:
   npm install @bake-js/-o-id
Enter fullscreen mode Exit fullscreen mode
  1. Importe o poder supremo:
   import { define } from '@bake-js/-o-id';
Enter fullscreen mode Exit fullscreen mode
  1. Decore suas classes como se não houvesse amanhã:
   @define('element-toppen')
   class ElementToppen extends HTMLElement {
     constructor() {
       super();
       this.innerHTML = `<p>Eu sou inevitável!</p>`;
     }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Use no seu HTML e veja a mágica acontecer:
   <element-toppen></element-toppen>
Enter fullscreen mode Exit fullscreen mode

🎉 Seja o Mago Supremo dos Custom Elements!

Com o @define, você está pronto pra criar componentes tão épicos que até o JavaScript vai pedir seu autógrafo. É tipo ter um sabre de luz no mundo do front-end!

Lembre-se: com grandes decorators vêm grandes PRs aprovados. Use com sabedoria e faça seus componentes brilharem mais que um console.log() no meio da noite!

Quer mais dessa magia? Corre lá no GitHub da @bake-js/-o-id e dá aquela ⭐️. É tipo um high-five virtual pro dev que fez essa magia acontecer!

Agora vai lá e faz a web tremer, jovem Padawan! May the @define be with you! 🚀✨

Top comments (0)