使用「react-to-webcomponent」库,在vite + React中创建Web组件

为什么选择用React而不是Lit或Preact来创建Web组件?

因为有一个只能在React中运行的库

怎么制作呢?

首先,使用pnpm create vite命令创建一个React+TypeScript的开发环境。
请假设您已经进入了相应的文件夹。

npm install -D react-to-webcomponent
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + React + TS</title>
  </head>
  <body>
    <my-element name="yuumillar"></my-element>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

用这样的方式,使用my-element。平时是像

这样的,将其变成我自己创建的Web组件。

import React from "react";
import ReactDOM from "react-dom/client";
import r2wc from "react-to-webcomponent";
import { App } from "./App";

const myElement = r2wc(App, React, ReactDOM, {
  props: {
    name: "string",
  },
});

customElements.define("my-element", myElement);

我会这样定义my-element。

type AppProps = {
  name: string;
};
export const App = ({ name }: AppProps) => <div>{name}</div>;

这是最基本的实现。当你改变HTML中的 props 时,App.tsx 中的 name 属性也会改变。

使用编译后的产物的方法是什么?

执行npm run build,如往常一样,创建dist文件夹。只需加载其中的js文件,即可使用Web Components。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + React + TS</title>
  </head>
  <body>
    <my-element name="yuumillar"></my-element>
    <script type="module" src="/dist/src_main.tsx.1e2b0b6f.js"></script>
  </body>

这种感觉啊。
你可以将它作为组件在喜欢的地方处理。即使在使用PHP的遗留系统中,也可以使用React。真方便啊。

广告
将在 10 秒后关闭
bannerAds