前端开发中经常需要重复编写相同的代码,这是一件很繁琐的事情。npm 的出现,让我们可以通过引用别人写好的代码来避免这种重复劳动,@bolt/element 就是其中之一,它提供了一系列的原生 Web 组件,非常方便实用。
@bolt/element 简介
@bolt/element 是一个基于 Web Components 标准 的 UI 套件库,它让我们可以使用更少的代码实现更多的功能。同时这个库也可以被用作其他项目的基础 UI 框架。
使用前提
在使用 @bolt/element 之前,需要确保你的环境符合以下要求:
- npm 包管理工具
- 熟悉 Web 组件的相关知识
安装
@bolt/element 可以通过 npm 安装:
npm install @bolt/element --save
安装成功后,可以在项目根目录下看到 node_modules/@bolt/element 目录。
基本用法
首先需要在 HTML 文件头部导入样式和组件库的 JS 文件:
<head> <link rel="stylesheet" href="./node_modules/@bolt/element/dist/css/bolt.min.css"> <script type="module" src="./node_modules/@bolt/element/dist/js/bolt.min.js"></script> </head>
然后就可以在 HTML 中使用相应的组件了,例如使用按钮组件:
<bolt-button> Click me </bolt-button>
是不是很简单?但在使用之前,需要了解 Web 组件的使用原理。
Web 组件
Web Components 是一种用于创建可重用组件的 API,可以让我们在不受组件库限制的情况下构建定制的组件。该 API 定义了三个核心规范:
- 自定义元素:让开发者可以创建自定义的 HTML 元素。
- Shadow DOM:提供了一种独立,控制和封装的文档树和“渲染引擎”。
- HTML 模板:可以根据所需的规则处理和呈现 DOM。
使用 Web 组件,需要在 JavaScript 中定义自定义元素并注册自己的元素。
-- -------------------- ---- ------- ----- ---------- ------- ----------- - ------------- - -------- - ------------------- - -- ----------- -- - ---------------------- - -- ------- -- - ---------------------------------- ------- ------- - -- -------- -- - ------ --- -------------------- - ------ ------------ --------- - - ------------------------------------ ------------展开代码
如何使用 @bolt/element 组件?
@bolt/element 底层实现了 Web 组件标准,这意味着我们可以使用它提供的接口来创建自定义元素并使用。
例如,我们可以使用 <bolt-button> 的内部类 BoltButton 继承 BoltElement,从而生成 button 组件:
-- -------------------- ---- ------- ------ - ----------- - ---- -------------------------------------- ----- ---------- ------- ----------- - ------ --- ------------ - ------ - --------- - ----- -------- -------- ---- -- ------ - ----- ------ - -- - ------ --- -------- - ------ - ----- - -------- ------------- - -- - -------- - ------ - ------- ----------------------------------- - - --------- - --- -- ---------- - ---------------------------- - -- -- ------------- --------- -- - - -------------------- ------ - ---------- --展开代码
其中 BoltElement 是一个公共类,它包装了底层 Web Components API 并提供一些功能。
在上面的代码中,我们通过增加 property 和 style 定义了 BoltButton 的一些特性,同时通过 render 方法渲染出了组件的样式和行为。
此之外,还有一个方法是供 BoltButton 定义使用的:
export const define = () => customElements.define('bolt-button', BoltButton, { extends: 'button' });
使用这个方法,我们就可以直接将 BoltButton 作为内置元素的扩展通用扩展,比如让 <bolt-button> 组件继承 <button>。
在 React 中使用
如果你用 React 开发得到想要用 @bolt/element,可以通过 react-shadow 中间件实现。
import React, { Component } from 'react'; import { withWebComponent } from 'react-shadow-dom-retargeter'; import { BoltButton } from '@bolt/element'; export default withWebComponent(BoltButton);
利用 withWebComponent,我们可以将 @bolt/element 中的 Web Components 映射到 React 的虚拟 DOM 中,这样我们就可以在 React 中使用 @bolt/element 包提供的组件。
结论
使用 @bolt/element,我们可以在 Web 中快速构建使用相关的复杂 UI 组件,并且这个组件可在不同的项目中利用,非常方便。同时,你还可以深入研究 Web Components 的使用原理,更好地了解前端技术的发展方向。
示例代码:https://github.com/daochenzha/websales/tree/master/web_components
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedaa50b5cbfe1ea061043a