0

我的案例:我正在连接到第 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();        
     }



4

0 回答 0