1.0.1 • Published 1 year ago

question-box v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

WebComponents 组件

在原生、Vue 、React、Angular 中使用

在原生 HTML 中应用:

点击

在 Vue 2x 中的应用:

import 'cai-ui';

在 Vue 3x 中的差异:

在最近的 Vue3 中,Vue 对 WebComponents 有了更好的支持。Vue 在 Custom Elements Everywhere 测试中获得了 100% 的完美分数。但是还需要我们做出如下配置: 跳过 Vue 本身对组件的解析 custom Elements 的风格和 Vue 组件很像,导致 Vue 会把自定义(非原生的 HTML 标签)标签解析并注册为一个 Vue 组件,然后解析失败才会再解析为一个自定义组件,这样会消耗一定的性能并且会在控制台警告,因此我们需要在构建工具中跳过这个解析:

// vite.config.js
import vue from "@vitejs/plugin-vue";

export default {
  plugins: [
    vue({
      template: {
        compilerOptions: {
          // 将所有包含短横线的标签作为自定义元素处理
          isCustomElement: (tag) => tag.includes("-"),
        },
      },
    }),
  ],
};

组件的具体使用方法和 Vue 2x 类似。

在 React 中的应用

import React, { useEffect, useRef, useState } from "react";
import "cai-ui";

function App() {
  const [type, setType] = useState("primary");
  const [value, setValue] = useState();
  const iptRef = useRef(null);
  useEffect(() => {
    document.getElementById("ipt").addEventListener("change", function (e) {
      console.log(e);
    });
  }, []);
  const handleClick = () => {
    console.log(value);
    setType("danger");
  };
  return (
    <div className="App">
      <cai-button type={type}>
        <span slot="text">哈哈哈</span>
      </cai-button>
      <cai-button onClick={handleClick}>
        <span slot="text">点击</span>
      </cai-button>
      <cai-input id="ipt" ref={iptRef} value={value}></cai-input>
    </div>
  );
}

export default App;

在 Angular 中的应用

  • Web Components 触发的事件可能无法通过 React 渲染树正确的传递。 你需要在 React 组件中手动添加事件处理器来处理这些事件。
  • 在 React 使用有个点我们需要注意下,WebComponents 组件我们需要添加类时需要使用 claas 而不是 className
1.0.1

1 year ago

1.0.0

1 year ago