React Native:AppState.addEventListener 在点击通知时在简历上注册重复事件

Ion*_*ger 3 android react-native react-native-push-notification

当我的应用程序从后台恢复时,我想运行这些代码。为此,我使用 AppState.addEventListener() 注册了一个事件。

  const handleAppStateChange = () => {
    console.log('Do stuff')
  }

  constructor(props: Props) {
    super(props)
    AppState.addEventListener('change', this.handleAppStateChange)
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this.handleAppStateChange)
  }
Run Code Online (Sandbox Code Playgroud)

当我通常退出应用程序并恢复时,它会按预期打印“做事”,但是(这是问题所在),当应用程序最小化并点击通知时,应用程序将打印“做事”两次。

我发现这是因为当我点击通知时,它似乎重新运行了应用程序(包括构造函数部分),这意味着它创建了第二个事件侦听器......

那么,有没有人知道为什么在点击通知时这样做,以及我是否可以阻止它(使用 react-native-push-notification 插件),或者是否有办法确保重复事件未注册?

这发生在我的 Android 物理设备上,不确定它是否也是 iOS 问题,但只是想我会检查是否有人知道这是否可行)

Ion*_*ger 5

所以经过一番折腾,终于想出了一个办法。这不是很好,但现在可以完成工作。

if (AppState._eventHandlers.change.size === 0) {
  AppState.addEventListener('change', this.handleAppStateChange)
}
Run Code Online (Sandbox Code Playgroud)

我觉得 AppState 页面https://facebook.github.io/react-native/docs/appstate严重不足,这就是为什么我现在能看到的唯一选择是这种私有方法。如果可以改进,将尝试跟进团队,因为在某些情况下,您不希望注册重复的事件是有道理的。

  • 现在我有这个 tsc 错误:错误 TS2339:属性“_eventHandlers”在类型“AppStateStatic”上不存在。 (2认同)