早上好袱耽!小伙伴們咒循!
在react的學(xué)習(xí)中樱蛤,是不是非常愉快,因?yàn)閞eact的社區(qū)化剑鞍,我們可以自己添加許多自己想要的功能昨凡,在Vue中關(guān)于組件傳值,有一個(gè)非常好用的工具叫做bus總線(官方封裝好的)蚁署!組件之間可以用統(tǒng)一的語法去相互傳遞數(shù)據(jù)便脊,而在React中官方并沒有封裝這個(gè)東西!沒關(guān)系光戈,沒有我們可以自己造一個(gè)哪痰。廢話不多說遂赠,直接上代碼。
const event ={}
//就是一個(gè)字符串晌杰,對(duì)應(yīng)一組回調(diào)函數(shù)
//callback就是事件對(duì)象的回調(diào)函數(shù)
export const $on=(eventName,callback)=>{ //eventName就是事件名
if(!event[eventName]){ //用自定義事件建立一個(gè)數(shù)組
event[eventName] =[]
}
event[eventName].push(callback)
}
export const $emit =(eventName,data)=>{
if(!event[eventName]) return;
event[eventName].forEach((cb)=>{
//用這個(gè)字符串跷睦,找到存儲(chǔ)回到函數(shù)的數(shù)組,并依次執(zhí)行數(shù)組里的回調(diào)函數(shù)
cb(data);
})
}
export const $off=(eventName,callback)=>{
if(!callback){ //不傳回調(diào)肋演,把所有的這個(gè)事件對(duì)應(yīng)的回調(diào)都清掉
event[eventName]=null;
}
else{ //只清除這個(gè)事件抑诸,這個(gè)回調(diào)函數(shù)
event[eventName]=event[eventName].filter((cb)=>{
return cb!==callback
})
}
}
接下來我們就可以愉快的用
1. $on去監(jiān)聽
2. $emit去發(fā)送
3. $off去清除。
今天又是混混睡睡的一天爹殊,那么分享就到這里了蜕乡,小伙伴們感受到React的優(yōu)雅了嘛!