Vue中的EventBus可以讓組件之間進行通信。但是,一旦應用結(jié)束,我們需要銷毀EventBus以釋放所有的內(nèi)存。下面是如何銷毀EventBus的步驟。
首先,我們需要在EventBus的構(gòu)造函數(shù)中添加一個destroy方法。該方法將會從Vue的原型中移除EventBus。在下面的代碼中,我們創(chuàng)建了一個名為bus的EventBus。
class EventBus { constructor() { this.callbacks = {}; } $on(eventName, callback) { this.callbacks[eventName] = this.callbacks[eventName] || []; this.callbacks[eventName].push(callback); } $emit(eventName, ...args) { if (this.callbacks[eventName]) { this.callbacks[eventName].forEach((callback) =>{ callback(...args); }); } } destroy() { delete Vue.prototype.$bus; } } const bus = new EventBus(); Vue.prototype.$bus = bus;
接下來,在Vue實例的beforeDestroy生命周期鉤子中調(diào)用EventBus的destroy方法。這樣,就能夠在組件被銷毀之前移除EventBus了。
export default { beforeDestroy() { this.$bus.destroy(); } }
React中也有EventBus的方式,我們可以在組件創(chuàng)建時添加EventBus,在組件卸載時銷毀EventBus。這樣可以避免在組件之間使用props進行通信的復雜度。
撤下我們今天的討論。在Vue中銷毀EventBus是非常重要的,盡管這是開發(fā)中很小的一個步驟。請使用上述代碼和步驟,在您的Vue應用程序中銷毀EventBus吧。