vue3的expose 笔记

56 阅读1分钟

vue3中expose应用

从react中来看的话很没道理,因为没有在定义组件中进行限制,但是从现场来看,简单了很多。

const refMorebar = ref<MoreBarExport>();
 <MoreBar
          showMore={state.showMore}
          ref={refMorebar}
          onMoreBarClick={() => {
            refMorebar.value?.reload();
            debugger;
          }}
        />

tsx

import { defineComponent } from "vue";
import css from "./index.module.less";
import morePng from "@/assets/image/extends.png";
import { makeRequiredProp } from "@/utils";

// TODO:类型
//interface StateType m
let props = {
  showMore: makeRequiredProp<Boolean>(),
};

export type MoreBarExport = {
  reload(): void;
};
const MoreBar = defineComponent({
  name: "MoreBar",
  props,
  emits: ["MoreBarClick"],
  setup(props, { emit, expose }) {
    //TODO:State
    // const state = reactive<StateType>({});

    expose({
      reload() {
        debugger;
      },
    });
    // TODO:DOM
    return () => (
      <section class={css.MoreBar}>
        <span>显示所有统计数据</span>
        <img src={morePng} onClick={() => emit("MoreBarClick")} />
      </section>
    );
  },
});
export default MoreBar;