Site icon Cssmayo

Web Components: Standar Browser untuk Komponen UI yang Benar-benar Portabel

Web Components

JAKARTA, cssmayo.com – Salah satu tantangan terbesar dalam pengembangan web modern adalah fragmentasi ekosistem. Komponen yang dibangun untuk React tidak bisa digunakan di Vue. Komponen Angular tidak berjalan di Svelte. Setiap framework memiliki cara tersendiri untuk mendefinisikan dan mengonsumsi komponen — menciptakan pulau-pulau yang tidak saling terhubung. Web Components hadir untuk menyelesaikan masalah tersebut dengan pendekatan yang paling mendasar: menggunakan standar yang sudah ada di browser itu sendiri.

Web Components adalah kumpulan standar web API yang memungkinkan developer membuat elemen HTML kustom yang bisa digunakan kembali, bersifat self-contained, dan bekerja di semua browser modern tanpa memerlukan framework atau library apapun. Selain itu, karena Web Components adalah bagian dari standar web platform yang didukung langsung oleh browser, komponen yang dibuat sekali bisa digunakan di React, Vue, Angular, Svelte, atau bahkan HTML biasa tanpa modifikasi.

Tiga Teknologi Inti Web Components

Web Components dibangun di atas tiga standar yang bekerja bersama:

Custom Elements: API yang memungkinkan developer mendefinisikan elemen HTML baru dengan nama kustom. Elemen kustom harus mengandung tanda hubung (misalnya <my-button>, <user-card>, atau <data-table>) agar tidak konflik dengan elemen HTML bawaan. Selain itu, elemen kustom bisa memiliki lifecycle callbacks seperti connectedCallback, disconnectedCallback, dan attributeChangedCallback yang dipanggil saat elemen ditambahkan, dihapus, atau atributnya berubah.

javascript
class MyButton extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `<button>${this.getAttribute('label')}</button>`;
  }
}
customElements.define('my-button', MyButton);

Hasilnya, elemen <my-button label="Klik Saya"> bisa digunakan di HTML seperti elemen biasa.

Shadow DOM: Mekanisme enkapsulasi yang memungkinkan komponen memiliki DOM dan CSS sendiri yang terisolasi dari halaman utama. Style dari halaman luar tidak akan mempengaruhi Shadow DOM, dan style di dalam Shadow DOM tidak akan “bocor” ke luar. Dengan demikian, komponen benar-benar mandiri dan tidak bergantung pada atau mengganggu style global halaman.

javascript
class MyCard extends HTMLElement {
  connectedCallback() {
    const shadow = this.attachShadow({ mode: 'open' });
    shadow.innerHTML = `
      <style>
        .card { padding: 16px; border-radius: 8px; background: #fff; }
      </style>
      <div class="card"><slot></slot></div>
    `;
  }
}

HTML Templates (<template> dan <slot>): Elemen <template> memungkinkan pendefinisian markup HTML yang tidak langsung dirender oleh browser — ia “tidur” di DOM dan baru diaktifkan saat JavaScript mengkloningnya. Sementara itu, elemen <slot> adalah mekanisme composition yang memungkinkan konten dari luar komponen disisipkan ke dalam template — mirip dengan children props di React atau slot di Vue.

Keunggulan Web Components

Menggunakan Web Components memberikan beberapa keuntungan yang signifikan:

Keterbatasan Web Components

Web Components bukan solusi sempurna untuk semua situasi:

Lit: Library Terbaik untuk Web Components

Lit adalah library ringan dari Google yang mempermudah pembuatan Web Components dengan template literal yang reaktif:

javascript
import { LitElement, html, css } from 'lit';

class MyCounter extends LitElement {
  static properties = { count: { type: Number } };
  static styles = css`.btn { padding: 8px 16px; }`;

  constructor() { super(); this.count = 0; }

  render() {
    return html`
      <button class="btn" @click=${() => this.count++}>
        Klik: ${this.count}
      </button>
    `;
  }
}
customElements.define('my-counter', MyCounter);

Oleh karena itu, banyak perusahaan besar seperti Google, Adobe, Salesforce, dan Microsoft menggunakan Lit sebagai fondasi design system mereka yang cross-framework.

Kesimpulan

Web Components mewakili pendekatan yang paling fundamental dan tahan lama untuk membangun komponen UI di web. Dengan berpegang pada standar platform yang sudah ada di browser, WebComponents menghasilkan komponen yang benar-benar portabel, berumur panjang, dan tidak terikat pada siklus hidup framework tertentu. Selain itu, dengan semakin matangnya dukungan browser dan library seperti Lit yang membuat pengembangannya semakin mudah, WebComponents adalah pilihan yang semakin relevan untuk design system dan komponen yang perlu hidup lintas ekosistem.

Eksplorasi lebih dalam Tentang topik: Techno

Cobain Baca Artikel Lainnya Seperti: 

Author

Exit mobile version