1. 渲染一个类似于 AntD 类似于 Message 的组件

该组件是在 vue 程序外调用的,也就是说我们需要重新执行 app.mount 来绑定到新的 dom 该组件的模版文件,最好是通过 vue 文件生成,而不应该直接在 tsx 中编写

//  edit tsx
import EditorCmp from "./components/editorRender.vue";
const app = createApp({
  components: {
    EditorCmp,
  },
  setup() {
    const columnsOptions = reactive({});
    const value = ref(EditParams.value);
    return () => (
      //  @ts-ignore
      <EditorCmp columnsOptions={unref(columnsOptions)} value={unref(value)} />
    );
  },
});

app.mount(Dom);

2. watch 无法监听 props

A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.

需要改成这样写

watch(
  () => props.value,
  (val) => {
    formState.value[id] = val;
  },
  {
    deep: true,
  }
);

3. Vue3 使用 setup 语法糖后父组件$refs 无法使用调用子组件函数、属性的解决方法

使用 (defineExpose)[https://v3.cn.vuejs.org/api/sfc-script-setup.html#defineexpose]

<script setup>
import { ref } from "vue";

const a = 1;
const b = ref(2);

defineExpose({
  a,
  b,
});
</script>

4. Injection “Symbol(pinia)” not found

原因是未初始化 pinia 导致的,有些组件是脱离 main.js 运行的,需要手动初始化下 pinia

setupStore(this.CMP);