web-component是一种html原生的自定义组件解决方案,他不基于任何库或者框架。
在web-component被多数主流浏览器支持之前,我们进行组件化开发通常需要依赖例如react、vue等js框架,而传统的html+js或者jquery则无法做到组件化的多处复用,这让原生js开发相当不便利,代码的可读性也比较差。
web-component是一套技术,由以下三项技术组成:
CustomElementRegistry.define() 原生js函数可以用于创建自定义元素,他增强了web-component的代码复用性。
CustomElementRegistry.define(name, constructor, options)可以接收三个参数,其中options为可选参数
元素类示例:
class MyDiv extends HTMLDivElement {
constructor() {
// Always call super first in constructor
super();
...
}
}
customElements.define("my-div", MyDiv, { extends: "div" });
对于影子dom我已在《shadow dom》中详细说明,感兴趣的可以前往查看。
模板技术主要包括template模板和slot插槽技术
这两个技术和vuejs框架的模板技术高度相似,他也增强了web-component的代码复用性。
总结,web component在代码复用性,代码可读性,元素独立性,元素私有性方面具有优势,并且依赖原生js,不依赖第三方框架,而且目前主流浏览器的兼容性也已经做的很好了,所以他在创建无框架依赖的自定义组件上具有天然优势。