问题背景
在微信小程序开发中,使用 mitt 等事件总线库时,常遇到事件订阅与组件生命周期脱节导致的内存泄漏问题。
由于小程序组件方法的上下文绑定特性,开发者通常被迫使用 eventBus.on('myEvent', this.handleEvent.bind(this)) 来注册事件。然而,.bind(this) 每次调用都会创建一个新的函数引用。
// 假设在组件的 lifetimes.attached 中
attached() {
// 注册监听
eventBus.on('myEvent', this.handleEvent.bind(this));
},
detached() {
// 尝试移除监听
eventBus.off('myEvent', this.handleEvent.bind(this)); // ❌ 无效!
},
methods: {
handleEvent(data) {
console.log(data);
}
}
2026年4月18日大约 2 分钟
