多项的委托管理与处理
import Depute from 'blue-depute';
const depute = new Depute({
hooks:{
//注册委托触发钩子
on(){},
//注销委托触发钩子
off(){},
//触发委托触发钩子
emit(){}
},
//默认$处理
eventIdSymbol: `$`
});
//委托处理
const deputeHandler = ()=> {
//todo
};
//注册委托会返回对应的委托ID =》 hooks.on
const deputeId = depute.on(`deputeName`, deputeHandler);
//触发委托 =》 hooks.emit
depute.emit(`deputeName`, (deputeEvent)=> {
const {
//委托数据
data,
//委托事件id
eventId,
type
} = deputeEvent;
//todo
});
//对于off的使用
//传入deputeName,会对匹配到的handler移除处理
depute.off(`deputeName`, deputeHandler);
//传入deputeName,不提供handler,会删除所有的委托处理
depute.off(`deputeName`);
//传入deputeName$委托事件id,会对制定的委托id委托删除处理
depute.off(`deputeName$${deputeId}`);
const depute = new Depute();
const someHandler = (event)=>{console.log(`todo some:`, event);
const deputeId0 = depute.on(`some`,someHandler}); //0
const deputeId1 = depute.on(`some`,()=>{}); //1
depute.emit(`some`, {someData:`data`}); // 0 // 1
depute.once(`some`, (event)=> {
//todo
});
//以on的实例为例
depute.emit(`some`,{someData:1})
/*
在on中回调会回去到DeputeKey相关内容
{
data: {someData:1},
type: `some`,
eventId: 0,
}
*/
emit也支持type + deputeId的调用
depute.emit(`some$${deputeId0}`,{}) // 调用depute使用$定义 例如 some$1
//以on的实例为例
depute.off(`some`); //这部分会删除所有的some相关委托
depute.off(`some`,someHandler); //这部分会删除some匹配为someHandler的相关委托
depute.off(`some$${deputeId1}`); //这部分会删除some$id相关委托
on,off,emit相关的调用,都会触发对应的hook,once的自动销毁也不例外。