在没有注册监听器的情况下发送 `Refresh`。-- React-native

Pre*_*ash 5 ios react-native

Refresh在没有注册侦听器的情况下发送。

@objc(MyModule)
class MyModule: RCTEventEmitter  {
    override func supportedEvents() -> [String]! {
        return ["Refresh"]
    }
}
Run Code Online (Sandbox Code Playgroud)

从“反应原生”导入 { NativeModules, NativeEventEmitter }

const myModuleEvt = new NativeEventEmitter(NativeModules.MyModule)
myModuleEvt.addListener("Refresh", (xyz) => console.log("hey"))
Run Code Online (Sandbox Code Playgroud)

似乎我已经按照文档做了所有的事情,但我仍然遇到这个问题。

小智 1

自从有人问这个问题以来已经很长时间了,遗憾的是没有答案,因为这也可以帮助我。我遇到了完全相同的问题,并且发布的答案都没有解决我的问题。最后做的是在我的类的 init 方法中调用 [super initWithDisabledObservation] 而不仅仅是 [super init]。

我查看了 RCTEventEmitter.m 源代码。问题的根源在于:

BOOL shouldEmitEvent = (_observationDisabled || _listenerCount > 0);

在我的例子中,当我的 JS 代码添加事件侦听器时,_listenerCount 似乎从未更新。因为 sendEventWithName 甚至从未调用相关代码来将事件发送回 JavaScript,而只是给了我这个警告。但是当调用 [super initWithDisabledObservation] 时,_observationDisabled 设置为 true,因此 sendEventWithName 会忽略侦听器计数并始终执行其应该执行的操作。