Ykcory web developer

Web Component


Web Component

是什么 🖖

Web Component 是一种用于创建可复用的组件的技术,它是由 W3C 官方推出的一套标准,并在现代浏览器中得到了广泛支持。Web Component 允许开发者创建自定义 HTML 标签,拥有自己的 JavaScript 行为和样式,并且可以在应用程序中进行复用。

作为开发者,我们都知道尽可能多的重用代码是一个好主意。这对于自定义标记结构来说通常不是那么容易 — 想想复杂的 HTML(以及相关的样式和脚本),有时您不得不写代码来呈现自定义 UI 控件,并且如果您不小心的话,多次使用它们会使您的页面变得一团糟。

哪里会用到 💡

举个例子 🌰

实现 web component 的基本方法通常如下所示:

  1. 创建一个类或函数来指定 web 组件的功能,如果使用类,请使用 ECMAScript 2015 的类语法 (参阅获取更多信息)。
  2. 使用 CustomElementRegistry.define() 方法注册您的新自定义元素,并向其传递要定义的元素名称、指定元素功能的类、以及可选的其所继承自的元素。
  3. 如果需要的话,使用 Element.attachShadow() 方法将一个 shadow DOM 附加到自定义元素上。使用通常的 DOM 方法向 shadow DOM 中添加子元素、事件监听器等等。
  4. 如果需要的话,使用 [` 和 定义一个 HTML 模板。再次使用常规 DOM 方法克隆模板并将其附加到您的 shadow DOM 中。
  5. 在页面任何您喜欢的位置使用自定义元素,就像使用常规 HTML 元素那样。

Web Component 和无框架/原生组件的开发方式略有不同。

对于 Web Component,我们需要使用 Custom Elements、Shadow DOM 和 HTML Templates 等技术来创建组件。下面是一个简单的 Web Component 示例,用于创建一个自定义的按钮:

<template id="custom-button">
  <style>
    button {
      background-color: blue;
      color: white;
      padding: 10px;
      border-radius: 5px;
    }
  </style>
  <button><slot></slot></button>
</template>

<script>
  class CustomButton extends HTMLElement {
    constructor() {
      super();
      const template = document.getElementById('custom-button').content;
      const shadowRoot = this.attachShadow({ mode: 'open' });
      shadowRoot.appendChild(template.cloneNode(true));
    }
  }

  customElements.define('custom-button', CustomButton);
</script>

在上面的代码中,我们使用了 HTML Templates 技术来定义组件的结构和样式,使用 Custom Elements 来创建自定义元素,并使用 Shadow DOM 来封装样式和 DOM 结构。最后通过 customElements.define 方法将自定义元素注册到浏览器中。

生命周期

参考

https://developer.mozilla.org/zh-CN/docs/web/web_components