在 aboutToAppear() 里订阅(实例构建前就位,不影响首帧)。在 aboutToDisappear() 里取消订阅(包括被 Pop 销毁)。如果是可复用组件,还可在 aboutToRecycle() 里解绑,aboutToReuse() 重绑。// pages/EventBusSafe.ets type Listener = (msg: string) => void class Bus { private static ls = new Set<Listener>() static on(fn: Listener) { this.ls.add(fn) } static off(fn: Listener) { this.ls.delete(fn) } static emit(msg: string) { this.ls.forEach(fn => fn(msg)) } } @Entry @Component struct BusConsumer { @State lastMsg: string = '-' private handler: Listener = (m) => { this.lastMsg = m } aboutToAppear() { Bus.on(this.handler) } aboutToDisappear() { Bus.off(this.handler) } build() { Column({ space: 12 }) { Text(`收到:${this.lastMsg}`).fontSize(18) Button('发消息').onClick(() => Bus.emit('Hello@' + Date.now())) }.padding(16) } }
在 aboutToAppear() 里订阅(实例构建前就位,不影响首帧)。
在 aboutToDisappear() 里取消订阅(包括被 Pop 销毁)。
如果是可复用组件,还可在 aboutToRecycle() 里解绑,aboutToReuse() 重绑。