Web Components पुन: प्रयोग योग्य (reusable), encapsulated कस्टम HTML एलिमेंट्स बनाने के लिए नेटिव ब्राउज़र API का एक सेट है — framework-agnostic और standards-based। तीन तकनीकें मिलकर काम करती हैं:
Web Components पुन: प्रयोग योग्य (reusable), encapsulated कस्टम HTML एलिमेंट्स बनाने के लिए नेटिव ब्राउज़र API का एक सेट है — framework-agnostic और standards-based। तीन तकनीकें मिलकर काम करती हैं:
<template>, <slot>) — inert, पुन: प्रयोग योग्य मार्कअप।class UserCard extends HTMLElement {
connectedCallback() { // lifecycle: runs when added to the page
const shadow = this.attachShadow({ mode: "open" }); // create shadow DOM
shadow.innerHTML = `
<style> h2 { color: blue; } </style>
<h2>${this.getAttribute("name")}</h2>
<slot></slot>
`;
}
}
customElements.define("user-card", UserCard); // name MUST contain a hyphen
<user-card name="Ann">Extra content goes in the slot</user-card>
shadow root के अंदर के styles scoped होते हैं — पेज का CSS अंदर नहीं पहुँच सकता, और कंपोनेंट का CSS बाहर लीक नहीं हो सकता। यह global-CSS की समस्या को नेटिव रूप से हल करता है:
/* page CSS */ h2 { color: red; } /* does NOT affect the <h2> inside user-card */
connectedCallback() // added to DOM
disconnectedCallback() // removed from DOM (cleanup)
attributeChangedCallback(name, old, val) // an observed attribute changed
static get observedAttributes() { return ["name"]; }
Web Components आपको पुन: प्रयोग योग्य widgets बनाने देते हैं जो वास्तविक style/DOM encapsulation के साथ किसी भी framework में (या बिना किसी framework के) काम करते हैं — विभिन्न stacks का उपयोग करने वाली टीमों में साझा किए जाने वाले design systems और micro-frontends के लिए आदर्श।
यही वह तरीका है जिससे Shoelace जैसी लाइब्रेरीज़ framework-agnostic कंपोनेंट्स शिप करती हैं।
इसके ट्रेड-ऑफ़ (verbose API, SSR/styling की जटिलता) का मतलब है कि ऐप डेवलपर्स अक्सर अभी भी React/Vue को प्राथमिकता देते हैं, लेकिन यह प्लेटफ़ॉर्म primitive शक्तिशाली और standards-based है।