Web Components là một tập hợp các API native của trình duyệt để xây dựng các custom HTML element có thể tái sử dụng, được đóng gói — không phụ thuộc framework và dựa trên chuẩn. Ba công nghệ kết hợp lại:
Web Components là một tập hợp các API native của trình duyệt để xây dựng các custom HTML element có thể tái sử dụng, được đóng gói — không phụ thuộc framework và dựa trên chuẩn. Ba công nghệ kết hợp lại:
<template>, <slot>) — markup trơ, tái sử dụng được.class UserCard extends HTMLElement {
connectedCallback() { // lifecycle: chạy khi được thêm vào trang
const shadow = this.attachShadow({ mode: "open" }); // tạo shadow DOM
shadow.innerHTML = `
<style> h2 { color: blue; } </style>
<h2>${this.getAttribute("name")}</h2>
<slot></slot>
`;
}
}
customElements.define("user-card", UserCard); // tên PHẢI chứa một dấu gạch ngang
<user-card name="Ann">Extra content goes in the slot</user-card>
Các style bên trong shadow root được giới hạn phạm vi — CSS của trang không thể với vào, và CSS của component không thể rò rỉ ra ngoài. Điều này giải quyết vấn đề global-CSS một cách native:
/* CSS của trang */ h2 { color: red; } /* KHÔNG ảnh hưởng tới <h2> bên trong user-card */
connectedCallback() // được thêm vào DOM
disconnectedCallback() // bị gỡ khỏi DOM (dọn dẹp)
attributeChangedCallback(name, old, val) // một attribute được quan sát đã thay đổi
static get observedAttributes() { return ["name"]; }
Web Components cho phép bạn xây dựng các widget tái sử dụng hoạt động trong bất kỳ framework nào (hoặc không framework nào) với việc đóng gói style/DOM thực sự — lý tưởng cho design system và micro-frontend được chia sẻ giữa các nhóm dùng các stack khác nhau.
Đó là cách các thư viện như Shoelace ship các component không phụ thuộc framework.
Các đánh đổi (API dài dòng, độ phức tạp SSR/styling) khiến các nhà phát triển ứng dụng thường vẫn thích React/Vue, nhưng nguyên thủy nền tảng này mạnh mẽ và dựa trên chuẩn.