Web Components in Easy Mode https://webcomponent.io
Find a file
2023-09-17 00:11:36 +02:00
assets chore: update examples 2023-09-16 23:08:52 +02:00
demo chore: update examples 2023-09-17 00:00:22 +02:00
index.mjs chore: initialize package; update examples 2023-09-16 23:33:46 +02:00
package.json chore: update package files list 2023-09-17 00:11:36 +02:00
README.md chore: update example 2023-09-17 00:03:35 +02:00
WebComponent.mjs chore: initialize package; update examples 2023-09-16 23:33:46 +02:00

Web Component Base

This serves as a very minimal base class for creating custom elements.

This does not aim to be an alternative to Lit. Lit is good; use it if you want.

Installation

npm i web-component-base

Usage

When you extend the WebComponent class for your component, you only have to define the template() and observedAttributes(), and the UI will be reactive on attribute changes.

In your component class:

// HelloWorld.mjs
import WebComponent from "web-component-base";

export class HelloWorld extends WebComponent {
  name = "World";
  emotion = "excited";

  static get observedAttributes() {
    return ["name", "emotion"];
  }

  get template() {
    return `
        <h1>Hello ${this.name}${this.emotion === "sad" ? ". 😭" : "! 🙌"}</h1>`;
  }
}

customElements.define('hello-world', HelloWorld);

Then changes in the attributes observed will cause the UI to render.

In your HTML page:

<head>
  <script type="module" src="HelloWorld.mjs"></script>
</head>
<body>
  <hello-world name="Ayo" emotion="sad">
  <script>
      const helloWorld = document.querySelector('hello-world');

      setTimeout(() => {
        helloWorld.setAttribute('emotion', 'excited');
      }, 2500)
  </script>
</body>

The result is a reactive UI that updates on attribute changes:

UI showing feeling toward Web Components changing from SAD to EXCITED