我的案例:我正在连接到第 3 方硬件设备。SDK 是本机的,因此我必须桥接它并为触发的事件创建侦听器以在 RN 端捕获。为了获得一致的 UI,并且由于 SDK 的限制性质,我必须在用户每次使用设备时创建一个新连接(这是他们吹入的东西)。对于每个新连接,我都需要创建一组新的发射器。
我的问题:我注册了一些监听器来监听原生 android 端的事件(第 3 方 SDK 事件)。
对于每个发射器,我将其添加到组件数组中。当我离开屏幕(不是屏幕移除事件,所以我不能依赖 ComponentWillUnmount)时,我会遍历数组并在每个发射器上调用 remove()。
每次访问该页面时,我都会尝试重新创建新的发射器。但是,当我再次访问屏幕时,即使当我将发射器记录到控制台时,旧发射器仍在发射事件,说它为空并且新发射器已创建
示例输出:
"流":[null,{"eventType":"流","key":1}]
功能:
constructor(props) {
super(props);
this._STATUS_BAR_HEIGHT = (Platform.OS === "ios" && NativeStatusBarManagerIOS.HEIGHT === 44); // Checks if the system needs to accommodate the Status bar height
this.listeners = [];
this.state = {
...defaultState
}
}
emitterCreation() {
let eventEmitterFlow = globalEmitter.addListener('flow', (flows) => {
console.log("Hello values");
})
this.listeners.push(eventEmitterFlow)
}
cleanUpComponent () {
this.setState({
...defaultState,
})
await MirModule.disconnectDevice(); // Disconnecting from the device
for (const listener of this.listeners) { // removes any outstanding listeners
console.log("Removing listeners");
listener.remove();
}