当前位置: 首页 > 科技观察

WebComponents入门指南

时间:2023-03-16 13:21:04 科技观察

今天的前端开发基本上离不开React和Vue这两个框架的支持,并且从这两个框架衍生出很多自定义组件库:Element(Vue)的出现AntDesign(React)等组件库让我们可以直接使用封装好的组件,并且在开源社区的帮助下,已经出现了很多模板项目(vue-element-admin,AntDesignPro),可以让我们快速上手一个专案。React和Vue虽然为我们的组件开发提供了便利,但是在组件开发思路上,一是自创的JSX语法,二是特有的单文件模板语法。两者的目标都是为组件提供一种封装方式。毕竟里面有原创的东西,和我们刚开始接触的Web基础的HTML、CSS、JS方法还是有一些区别的。今天要介绍的是通过HTML、CSS、JS实现自定义组件,也是目前浏览器原生提供的解决方案:WebComponents。什么是网络组件?WebComponents本身并不是一个单一的规范,而是一组DOMAPI和HTML规范,用于创建具有自定义名称的可重用HTML标签,并可以直接在您的Web应用程序中使用。代码重用一直是我们的目标。我们可以将JS中可复用的代码封装成一个函数,但是对于复杂的HTML(包括相关的样式和交互逻辑),我们一直没有更好的复用方式。要么使用后端模板引擎,要么使用现有的框架重新封装DOMAPI,而WebComponents的出现就是为了补充浏览器在这方面的能力。如何使用Web组件?WebComponents中包含的几个规范已经在W3C和HTML标准中进行了标准化,主要由三部分组成:自定义元素(customelements):一组用于创建自定义HTML标签的JavaScriptAPI,并允许在创建标签时进行一些操作或销毁;ShadowDOM(影子DOM):一组JavaScriptAPI,用于将创建的DOMTree插入到现有元素中,DOMTree不能被外部修改。不用担心元素会受到其他地方的影响;HTML模板(HTMLtemplates):通过在JS中,我们可以直接通过DOM的API获取模板实例。获取实例后,不能直接修改模板中的元素。相反,必须调用tpl.content.cloneNode进行复制,因为页面上的模板不是一次性的,其他组件可能也会引用。//通过ID获取标签consttplElem=document.getElementById('helloUserTpl');constcontent=tplElem.content.cloneNode(true);我们得到复制的模板后,就可以对模板进行一些操作,然后将其插入到DOM中的Shadow中。添加样式其中:host伪类用于定义shadow-root的样式,即包裹这个模板的标签的样式。Placeholderelement占位符元素是先在模板中的某个位置占据一个位置,然后指定该元素插入到界面时该位置应该显示什么。用户名

##欢迎关注公众号:更amazing这里前端的用法

和vue的slot用法是一致的,就不做过多介绍了。综上所述,WebComponents的基本用法介绍到这里就差不多了。与其他支持组件化方案的框架相比,使用WebComponents有以下优势:原生浏览器支持,无需引入额外的第三方库;真正内部私有化的CSS,不会造成样式冲突;无需编译即可实现,与外部DOM隔离的组件化方案;WebComponents的主要缺点是标准可能还不稳定,例如文章中没有提到模板的模块化方案已经被废除,也没有正式的方案引入模板文件。而且,虽然可以使用nativeAPI,但是并不好用,不然就没有jQuery这样的库来操作DOM了。幸运的是,现在也有很多基于WebComponents实现的框架。后面会开篇文章讲一下使用WebComponents的框架lit-html和lit-element。好了,今天的文章就到这里,希望大家有所收获。