我有一些代码想要在我的应用程序从后台恢复时运行。为此,我使用 AppState.addEventListener() 注册一个事件。
const handleAppStateChange = () => {
console.log('Do stuff')
}
constructor(props: Props) {
super(props)
AppState.addEventListener('change', this.handleAppStateChange)
}
componentWillUnmount() {
AppState.removeEventListener('change', this.handleAppStateChange)
}
当我正常退出应用程序并恢复时,它会按预期打印“do stuff”,但是(这就是问题),当应用程序最小化并且我点击通知时,应用程序将打印“Do stuff”两次。
我发现这是因为当我点击通知时,它似乎重新运行应用程序(包括构造函数部分),这意味着它创建了第二个事件监听器...
那么,有谁知道为什么在点击通知时会这样做,以及我是否可以阻止它(使用react-native-push-notification插件),或者是否有一种方法可以确保重复的事件是没有注册?
这发生在我的 Android 物理设备上,不确定这是否也是 iOS 问题,但我只是想检查一下是否有人知道这是否可能)
最佳答案
经过一番折腾,我终于找到了解决办法。这不是很好,但现在已经完成了工作。
if (AppState._eventHandlers.change.size === 0) {
AppState.addEventListener('change', this.handleAppStateChange)
}
我感觉AppState页面https://facebook.github.io/react-native/docs/appstate ,严重不足,这就是为什么我现在能看到的唯一选择是这种私有(private)方法。如果可以改进的话,我们将尝试与团队跟进,因为在某些情况下,您不希望注册重复的事件是有道理的。
关于android - React Native : AppState. addEventListener 在点击通知时在恢复时注册重复事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482733/