Web Component 组件库有什么优势

前言

前端目前比较主流的框架有 react,vuejs,angular 等。 我们通常去搭建组件库的时候都是基于某一种框架去搭建,比如 ant-design 是基于 react 搭建的UI组件库,而 element-plus 则是基于 vuejs 搭建的组件库。

可能你有这种体会,在开发 vue 项目需要用到一个库插件,去搜索一遍发现只有 react 开发的功能比较符合自己的需求,这时候就比较纠结了。虽然目前社区有相关工具 像 veaury,提供框架之间的转化服务,比如 vuejs 组件转化为 react 组件。但是毕竟是不同的框架,有不同的标准。如果有问题,就不知道从何入手调试解决问题了。

并且框架升级之后,比如从 2.x 升级到 3.x,总是带来一定的破坏性,升级和更改框架的成本很大,项目业务稳定后几乎是不可能升级。

所以在寻找有没有哪一种 UI 库可以跨越框架限制使用在项目中,在了解 web-component 技术后,使用 Stencil.js 框架根据 Element-plus 设计造轮子搭建了一个 stencil-component-ui 示例组件库,发现这是一种不错的技术和方向。

没错,上面看到的是 web-component 开发的 button 组件,感觉和 element-plus button 按钮长的一样,不过开发起来更简单代码量更少,而且能用在 React/Vue/Angular 不同框架项目上,甚至能用在 纯JS和服务端渲染 静态网站

注意:只是简单示例项目,功能不完善

什么是web-component

“Web Components” 是一组现代的 Web 开发标准和技术,它的一系列 HTML 和 DOM 的特性加入 w3c 标准,允许开发者创建封装好的、可复用的自定义元素。这些自定义元素可以在 HTML 中用作一等公民,与原生的 HTML 元素一样的使用

由于 Web Components 是由w3c组织去推动的,因此它很有可能在不久的将来成为浏览器的一个标配。

在我了解到京东 micro-app 微前端框架、taro-ui UI 库,语雀的富文本编辑器都使用到 web components 技术

web-component 特性

Web Components 由 3 个核心部分组成

Custom Elements

这项技术允许开发者定义自己的 HTML 元素。可以创建新的 HTML 标签,并定义它们的行为。一旦一个 Custom Element 被定义和注册,可以在页面上像使用其他 HTML 元素一样使用它。

<my-element></my-element>

Shadow DOM

Shadow DOM 允许开发者封装一个 DOM 子树和样式,让它们与主文档的 DOM 保持独立。这意味着在组件内部定义的样式不会影响到外部的页面,反之亦然。

例如,在 Shadow DOM 中的样式只影响 Shadow DOM:

<my-element>#shadow-root<style>p { color: red; }</style><p>This is in shadow DOM and styled red.</p>
</my-element>

HTML Templates

HTML Templates 通过 <template><slot> 元素,允许定义一个可以在 JavaScript 中使用的 HTML 片段。它在不被引用的情况下不会被渲染,且不会影响页面的加载。
例如:

<template id="my-template"><p>My Template</p>
</template>

应用场景

Web Components 提供了一种创建可重用、封装和模块化的自定义 HTML 元素的方式。由于它们是基于 Web 平台的标准技术构建的,这意味着构建的 Web Components 可以在任何使用了现代 Web 技术的应用中使用,无论这些应用是使用哪种框架(如 React、Angular、Vue 等)或者不使用框架构建的。

在 caniuse 查看它的兼容性,不兼容 IE11,Vue3 都不兼容 IE11了,总体还不错

使用 Web Component 可以做的事情

1、开发 UI 组件库

  • 开发一个通用的、可在多个项目中重用的 UI 组件库。
  • 由于 Web Components 本质上是框架无关的,它们可以在不同的前端框架中使用,增强其可移植性。

2、第三方组件

  • 创建可以轻松集成到其他应用的第三方组件(例如,社交分享按钮、聊天窗口、支付窗口等)。
  • 避免样式和脚本干扰,提供更加干净、无冲突的集成。

3、微前端

  • 使用 Web Components 构建微前端,允许将大型应用拆分成独立部署的较小应用,这些较小的应用可以由不同的团队独立开发和部署。
  • 由于 Web Components 的封装性,不同的微前端应用不会互相干扰。

4、嵌入内容和小部件

  • 创建可嵌入到其他应用中的内容和小部件,例如:评论系统、天气小部件等。

5、多平台应用

  • 构建能在多个平台(桌面、移动、Web)上运行的应用。使用 Web Components 可以保证在不同平台之间重用 UI 组件。

所以 Web Components 天然的和我们开发的组件思想相吻合,支持原子性、可复用、可重组,并且移植性强,支持跨平台跨框架

入门示例

接下来介绍 如何创建一个简单 Web Components 组件

1、定义组件

/*** 使用 customElements.define() 方法用来注册一个 custom element* 参数如下:* - 元素名称,符合 DOMString 规范,名称不能是单个单词,且必须用短横线隔开* - 元素行为,必须是一个类* - 继承元素,可选配置,一个包含 extends 属性的配置对象,指定创建的元素继承自哪个内置元素,可以继承任何内置元素。*/class MyCustomElement extends HTMLElement {constructor(){super();this.render();}render(){const shadow = this.attachShadow({mode: 'open'});const text = document.createElement("span");text.textContent = 'Hi Custom Element!';text.style = 'color: red';shadow.append(text);}
}customElements.define('my-custom-element', MyCustomElement)

2、使用组件

<!DOCTYPE html>
<html lang="en">
<head><script src="./index.js" defer></script>
</head>
<body><h1>my-custom-element</h1><my-custom-element></my-custom-element>
</body>
</html>

上面的代码实现 MyCustomElement 类来定义组件,通过 customElements.define 方法定义注册组件,导入组件后,跟使用普通 HTML 标签一样直接使用自定义组件 <my-custom-element></my-custom-element>

Web Component 缺点

从上面的开发示例来看,虽然开发一个组件看起来很简单,但是在我们使用习惯框架之后,发现使用它开发似乎要回到 jquery 时代

  • 没有响应式
  • 没有虚拟 dom
  • 没有简洁的api
  • 没有脚手架
  • HTMLElement 不支持SSR
  • ……

所以开发一个复杂的组件库,这些远远不够,好在现在也有一些非常好用的开源库

Web Component 开源库

Stencil

GitHub 仓库: Stencil

Stencil:2019 年6月正式发布第一版,官方定义是一个Web Component编译器,lonic 团队开发,把现在流行的虚拟 dom、异步渲染、响应式、JSX 等概念都做了支持,并且自己只是一个构建时工具。用 Stencil 开发的框架可以独立运行、也可以运行在主流框架。

它的设计思想和 React 框架很相似,拥有虚拟 dom、异步渲染、响应式、JSX,也有 Vue 框架 watch 监听数据的影子,总的来说集成了很多 Angular、React、Vue 框架的诸多优点,这也正是选择它开发组件库的原因。

Lit

GitHub 仓库: Lit

Lit 是由 Google 制作的一个简单的库,用于创建 Web Components。Lit 提供了一个基础类(LitElement)来帮助开发者创建 Web Components,并使用一个叫做 lit-html 的模板引擎来定义组件的 HTML 结构。

Lit-html 基于 ES 的模板自变量和 template 标签,用注释节点去动态填充,没
有 JSX 转换虚拟 dom的过程,把大部分模板创建渲染的事都交给浏览器去做,提供了轻量的 api 让我们可以在JS中写 HTML-Templates。 Lit- Element的 Reactive properties、Scoped styles 等功能也很实用。

Fast

GitHub 仓库: Fast

FAST 微软2020 年发布的标准化解决方案,可以用来创建组件和设计系统。组件核心是基于 Web Components 做到框架无关,帮助开发者快速构建高性能的 Web 用户界面。

Vaadin Components

GitHub 仓库: Vaadin Components

Vaadin Components 是一套用于构建 Web 应用的高质量的 Polymer(一种 Google 提出的创建 Web Components 的库)元素集。

Material Web Components

GitHub 仓库: Material Web Components

Material Web Components 提供了一套实现了 Google 的 Material Design 设计理念的 Web Components。

Shoelace

GitHub 仓库: Shoelace

Shoelace 提供了一套完整的、用原生 Web Components 制作的、可自定义的 UI 组件。

Open-WC

GitHub 仓库: Open-WC

Open-WC 提供了一套建议和工具集,用于帮助开发者创建 Web Components 和 Web 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer的代码实现 day03(Positional Encoding)

Positional Encoding的理论部分 注意力机制是不含有位置信息&#xff0c;这也就表明&#xff1a;“我爱你”&#xff0c;“你爱我”这两者没有区别&#xff0c;而在现实世界中&#xff0c;这两者有区别。所以位置编码是在进行注意力计算之前&#xff0c;给输入加上一个位置信息…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(五)- 向量加载和存储

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

Redis -- 缓存穿透问题解决思路

缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a; 额外…

【JavaSE】接口 详解(上)

前言 本篇会讲到Java中接口内容&#xff0c;概念和注意点可能比较多&#xff0c;需要耐心多看几遍&#xff0c;我尽可能的使用经典的例子帮助大家理解~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 接口 语法…

pta 1086 就不告诉你

1086 就不告诉你 分数 15 全屏浏览 切换布局 作者 CHEN, Yue 单位 浙江大学 做作业的时候&#xff0c;邻座的小盆友问你&#xff1a;“五乘以七等于多少&#xff1f;”你应该不失礼貌地围笑着告诉他&#xff1a;“五十三。”本题就要求你&#xff0c;对任何一对给定的正整数…

新手开抖店:选品过后如何有效对接达人?这些方法100%有效!

哈喽~我是电商月月 要说做抖音小店最主要的是什么&#xff1f;那当然是找品了 那出单最快的方法是什么&#xff1f;无疑是达人带货了&#xff01; 但新手店铺没销量&#xff0c;没体验分&#xff0c;没好评怎么能让达人同意帮我们带货呢&#xff1f; 方法其实很简单&#x…

“双碳”目标下资源环境中的可计算一般均衡(CGE)模型应用

我国政府承诺在2030年实现“碳达峰”&#xff0c;2060年实现“碳中和”&#xff0c;这就是“双碳”目标。为了实现这一目标就必须应用各种二氧化碳排放量很高技术的替代技术&#xff0c;不仅需要考虑技术上的可靠性&#xff0c;也需要考虑经济上的可行性。可计算一般均衡模型&a…

AI预测福彩3D第26弹【2024年4月4日预测--第4套算法重新开始计算第11次测试】

今天清明节假日&#xff0c;一会要外出&#xff0c;可能要晚点回来。咱们尽早先把预测数据跑完&#xff0c;把结果发出来供各位彩友参考。合并下算法&#xff0c;3D的预测以后将重点测试本套算法&#xff0c;因为本套算法的命中率较高。以后有时间的话会在第二篇文章中发布排列…

UTONMOS:AI+Web3+元宇宙数字化“三位一体”将触发经济新爆点

人工智能、元宇宙、Web3&#xff0c;被称为数字化的“三位一体”&#xff0c;如何看待这三大技术所扮演的角色&#xff1f; 3月24日&#xff0c;2024全球开发者先锋大会“数字化的三位一体——人工智能、元宇宙、Web3.0”论坛在上海漕河泾开发区举行&#xff0c;首次提出&…

深入探索MySQL:成本模型解析与查询性能优化,及未来深度学习与AI模型的应用展望

码到三十五 &#xff1a; 个人主页 在数据库管理系统中&#xff0c;查询优化器是一个至关重要的组件&#xff0c;它负责将用户提交的SQL查询转换为高效的执行计划。在MySQL中&#xff0c;查询优化器使用了一个称为“成本模型”的机制来评估不同执行计划的优劣&#xff0c;并选择…

网络安全 | 什么是负载均衡器?

关注WX&#xff1a; CodingTechWork 介绍 负载均衡是在多个服务器之间有效分配网络流量的过程。负载均衡的目的是优化应用程序的可用性&#xff0c;并确保良好的终端用户体验。负载均衡可协助高流量网站和云计算应用程序应对数百万个用户请求&#xff0c;从而保证客户请求不会…

2012年认证杯SPSSPRO杯数学建模C题(第二阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现&#xff1a; 从 1984 年的美国洛杉矶奥运会开始&#xff0c;奥运会就不在成为一个“非卖品”&#xff0c;它在向观众诠释更高更快更强的体育精神的同时&#xff0c;也在攫取着巨大的商业价值&#…

颜色空间/模型(RGB, YUV,CMY/CMYK, HSI, HSV等)

什么是颜色 颜色是通过眼、脑和我们的生活经验所产生的对光的视觉感受&#xff0c;我们肉眼所见到的光线&#xff0c;是由波长范围很窄的电磁波产生的&#xff0c;不同波长的电磁波表现为不同的颜色&#xff0c;对色彩的辨认是肉眼受到电磁波辐射能刺激后所引起的视觉神经感觉…

51单片机实验02- P0口流水灯实验

目录 一、实验的背景和意义 二、实验目的 三、实验步骤 四、实验仪器 五、实验任务及要求 1&#xff0c;从led4开始右移 1&#xff09;思路 ①起始灯 &#xff08;led4&#xff09; ②右移 2&#xff09;效果 3&#xff09;代码 2&#xff0c;从其他小灯并向右依次…

面向C++程序员的Rust教程(二)

先序文章请看&#xff1a; 面向C程序员的Rust教程&#xff08;一&#xff09; 所有权与移动语义 要说Rust语言跟其他语言最大的区别&#xff0c;那笔者觉得非数这个所有权和移动语义莫属。 深浅复制 对于绝大多数语言来说&#xff0c;变量/对象之间的赋值通常都是复制语义。…

微信开发工具——进行网页授权

微信开发工具——进行网页授权 微信公众平台设置 1.在首页创建好自己的订阅号 网站&#xff1a;https://mp.weixin.qq.com/ 点击立即注册,在选择订阅号&#xff08;个人创建使用&#xff09; 之后按流程填写后&#xff0c;点击设置与开发-------->基本配置&#xff0c;这…

JAVA八股--redis

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log&#xff08;没掌握MyISAM 和 InnoDB 有什么区别&#xff1f; 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes&#xff08;k8s&#xff09;&#xff1a;精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…

基于Java+SpringBoot+Mybaties+layui+Vue+elememt 实习管理系统 的设计与实现

一.项目介绍 前台功能&#xff1a;用户进入系统可以实现首页&#xff0c;系统公告&#xff0c;个人中心&#xff0c;后台管理等功能进行操作 后台由管理员&#xff0c;实习单位&#xff0c;教师和学生&#xff0c;主要功能包括首页&#xff0c;个人中心&#xff0c;班级管理&am…

【C++学习】哈希的应用—位图与布隆过滤器

目录 1.位图1.1位图的概念1.2位图的实现3.位图的应用 2.布隆过滤器2.1 布隆过滤器提出2.2布隆过滤器概念2.3如何选择哈希函数个数和布隆过滤器长度2.4布隆过滤器的实现2.4.1布隆过滤器插入操作2.4.2布隆过滤器查找操作2.4.3 布隆过滤器删除 2.5 布隆过滤器优点2.6布隆过滤器缺陷…