Skip to content

事件总线 ​

createEmitter() 创建隔离的同步事件总线;emitter 是框架提供的共享实例。

ts
import { createEmitter } from '@puresnake/snake-ui';

const emitter = createEmitter();
const off = emitter.on<{ id: number }>('order:updated', payload => {
    console.log(payload.id);
});

emitter.emit('order:updated', { id: 1 });
off();

实例提供 on、off、emit 和 clear。页面级事件应在卸载时退订;父子组件通信优先使用 Props/Events,跨域共享状态优先使用明确的 store。

API 与生命周期 ​

方法行为
on(name, handler)注册处理函数;同一事件下重复注册同一函数只保留一次,返回解绑函数
off(name, handler?)删除指定处理函数;不传 handler 时删除该事件的全部处理函数
emit(name, payload)同步通知该事件的处理函数,无返回值
clear()删除实例中的全部事件

createEmitter() 每次创建独立实例;导出的 emitter 是共享实例。Vue 页面或组件中的订阅应在 onBeforeUnmount 中调用 on() 返回的解绑函数。处理函数中的异常会同步传给调用方,emit 不会替你捕获。

为 uni-app 商城与 CMS 场景设计