Skip to content

发布订阅

mitt

  • 集成了mitt实现发布订阅
  • 封装成hook

hook

ts
import { onUnmounted } from 'vue';

import mitt from 'mitt';

type IEventbus = {
  publish: (eventName: string, content: any) => void;
  subscribe: (eventName: string, callback: (content: any) => void) => void;
};

const emitter = mitt();

/**
 * @description: 发布事件
 * @param {*} eventName 事件名称
 * @param {*} content 事件内容
 */
const publish = (eventName: string, content: any) => {
  emitter.emit(eventName, content);
};

/**
 * @description: 订阅事件
 * @param {*} eventName 事件名称
 * @param {*} callback 回调的函数
 */
const subscribe = (eventName: string, callback: (content: any) => void) => {
  emitter.on(eventName, (content) => callback(content));
};

/**
 * @description: 导出useEventbus
 */
export const useEventbus = (): IEventbus => {
  // 销毁的事件
  onUnmounted(() => {
    // 清空所有的事件,避免多组件互相清理
    emitter.all.clear();
  });

  return {
    publish,
    subscribe,
  };
};

如何使用?

ts
import { useEventbus } from '@vben/hooks';
const eventbus = useEventbus();
// 发布事件
eventbus.publish('name', '内容');

//订阅事件
eventbus.subscribe('ReceiveTextMessageHandlerAsync', (content) => {
  // todo 
});

如有转载或 CV 的请标注本站原文地址