WebComponents
Web Components 是一套不同的技術,允許您創建可重用的定制元素(它們的功能封裝在您的代碼之外)并且在您的 web 應用中使用它們。
Web Components
可以理解成自定義組件。
使用 Web Components
可以達到如原生的 video
標簽的效果,video
標簽在被瀏覽器解析后有許多子節點,如播放控制器部分的控制按鈕,這些在使用 video
的時候是不需要關心的,也不用手動書寫這些子節點,同時又能被多處復用。
這些子節點通常是看不見的,藏起來的,但是通過 Chrome
的設置可以顯示出來。
這種看不見的子節點被稱為 Shadow DOM
,許多文獻稱為 影子節點
或者 影子 DOM
。
Web Components
具有非常好的隔離性,特別在樣式表現上,可以做到完全隔離。
1. 使用
一個 Web Components
繼承自 HTMLElement
,然后通過 customElements.define()
來注冊這個 Component
。
以下例子?會創建一個名為 to-imooc
的組件。
class ToImooc extends HTMLElement { // Web Components 繼承自 HTMLElement
constructor() {
super(); // 調用父類構造函數
const link = document.createElement('a'); // 創建一個 a 元素
link.href = 'javascript:;'; // 默認什么都不做
link.innerText = 'GOGOGO! Imooc 出發!'; // 顯示的文案
link.addEventListener('click', () => { // 跳轉事件
alert('坐穩啦!要發車啦!??!');
window.location.href = '//imooc.com';
});
this.append( // this 就是自定義的節點
link,
document.createElement('br'),
);
}
}
window.customElements.define('to-imooc', ToImooc);
這樣就創建好了一個自定義的組件。
然后在 HTML
中使用就好了。
<to-imooc></to-imooc>
<to-imooc></to-imooc>
<to-imooc></to-imooc>
<to-imooc></to-imooc>
這樣就完成了一個簡單的組件,可以重復使用。
2. 應用
根據 Can I Use
可以看出,該特性現在瀏覽器支持并不廣泛,不太適合在生產環境使用,但基于該特性,還是衍射除了許多 “未來”。
2.1 微前端
微前端
尚處在發展時期,其核心概念和 微服務
相似。
現階段較為常用的微前端框架為 single-spa
和 qiankun,后者是基于前者實現的。
該技術能做到 技術棧無關
,即一個應用,能由多個不同技術的子應用構成,同時做到子應用的相互隔離,這里的隔離就可以選擇采用 Web Components
實現。
2.2 Omi
Omi 是由騰訊開源的跨端框架,其就是基于 Web Components 來設計的。
3. 小結
雖然 Web Components
還存在兼容性問題,但可以作為預備知識進行了解,或者應用于一些內部對兼容性無要求的項目。