Vue3 在setup语法糖中使用mitt进行组件通信

389 阅读1分钟

安装mitt库

npm install --save mitt

编写UseMitt.ts文件

在setup语法糖中,如果在父组件中使用const emitter = mitt(),那么子组件无法接收,所以新建一个UseMitt.ts文件,在这个文件中使用const emitter = mitt()并导出 UseMitt.ts文件

import mitt from 'mitt';
export const emitter = mitt();

父组件中导入emitter

导入emitter并注册事件,在组件卸载后要记得注销这个事件

<template>
  <div>
    <LocalComponent >

    </LocalComponent>

  </div>
</template>
<script setup lang="ts">
import LocalComponent from "../components/component/LocalComponent.vue";
import {emitter} from '../hooks/UseMitt';//导入emitter
import { onUnmounted } from "vue";

const callback = (test:string) => {
  console.log(test);
}
// 注册事件
emitter.on('testEvent',callback);
// 组件卸载时,注销事件
onUnmounted(() => {
  emitter.off('testEvent',callback)
})
</script>

子组件导入emitter并且触发事件

<template>
    <div>
        <div>this is a LocalComponent</div>
    </div>
</template>
<script lang="ts" setup>
import { onMounted } from 'vue';
import {emitter} from '../../hooks/UseMitt';

onMounted(() => {//在子组件挂载完毕后,触发父组件注册的事件
    emitter.emit('testEvent',123);
});
</script>

使用新版mitt时报出类型错误的解决方案 5-11 使用新版 mitt 时报出类型错误的解决方案_慕课网 (imooc.com)