如何在React中使用Web组件(附代码示例)

111 阅读2分钟

如何在React中使用Web组件

这篇文章介绍了如何在React的最新实验性分支中使用Web Components。要在旧版本中使用Web Components,请阅读这里

React直到最近才完全支持Web组件,特别是自定义元素。然而,React最近增加了对Web组件的实验性支持,使React应用程序能够使用它们,而不需要特殊的垫片来兼容。这对于组件库、设计系统和微前端的使用情况来说是非常好的。

网络组件为网络提供了一个通用和可重复使用的UI组件模型。Web组件由一些独立的技术组成,如自定义元素、阴影DOM和HTML模板。结合起来,我们可以创建和部署可以在任何JavaScript框架中工作的组件。

网络组件主要是通过属性和自定义事件进行通信。属性可以被设置为将数据传入组件,而自定义事件可以让组件将数据传回给主机应用程序。

使用React的最新实验分支,让我们看看React应用程序中的一个简单的警报Web组件。

在我们的例子中,我们有一个简单的警报Web组件。这个组件有一个status 属性用于不同的状态,还有一个closable 属性用于设置警报是否应该显示一个关闭按钮。

A Web Component working in React

为了使用我们的警报Web组件,我们导入组件文件并将标签添加到我们的React组件:

import React, { useState }  from 'react';
import './alert.js';

export default function App() {
  return (
    <div>
      <x-alert>
        This is a Web Component in React
      </x-alert>
    </div>
  );
}

现在我们可以开始设置属性和配置我们的警报:

import React, { useState }  from 'react';
import './alert.js';

export default function App() {
  return (
    <div>
      <x-alert status={'success'} closable>
        This is a Web Component in React
      </x-alert>
    </div>
  );
}

大多数Web组件允许JavaScript属性和HTML Attributes来传递数据。HTML属性仅限于字符串类型,但可以进行转换。为了保持一致性,在可能的情况下,我通常喜欢设置属性而不是属性。

Web组件还可以发射CustomEvent 事件类型,以通知我们的应用程序的变化。例如,当用户点击关闭按钮时,警报将提供一个closeChange 事件。要监听事件,在事件名称前加上on 。注意事件的大写字母保持不变。例如,自定义事件closeChange 在你的JSX中变成oncloseChange

import React, { useState }  from 'react';
import './alert.js';

export default function App() {
  const [show, setShow] = useState(true);

  return (
    <div>
      <button onClick={() => setShow(!show)}>toggle alert</button>

      <x-alert hidden={show} status="success" closable oncloseChange={() => setShow(!show)}>
        This is a Web Component in React
      </x-alert>
    </div>
  );
}

现在我们可以从我们的Web组件中监听事件,并像我们应用程序中的其他组件一样设置状态。请看下面的完整工作演示,了解警报组件的细节