在我的 React Native 应用程序中,我有两个屏幕screenA和screenB. 我正在使用react-navigation@4.x,并且使用.screenAscreenBthis.props.navigation.navigate('screenB')this.props.navigation.goBack()
我正在使用OneSignal,并且在screenA安装时我添加了一个 OneSignal 事件侦听器。
屏幕A
OneSignal.addEventListener('opened', () => console.log(this.props.navigation.state.routeName));
我在 中具有相同的代码screenB,到目前为止,它按预期工作。当我打开
screenA并打开推送通知时,它会记录screenA,当我打开screenB它时会记录screenB,因为screenB's 事件侦听器会覆盖screenA's.
但是,当我导航回 时screenA,screenB的事件侦听器仍然存在,因此我添加此代码screenB以删除其事件侦听器:
屏幕B
componentWillUnmount() {
OneSignal.removeEventListener('opened');
}
为了screenA重新调用它的事件侦听器,我添加了以下代码:
屏幕A
componentDidUpdate(prevProps) {
if (!prevProps.isFocused && this.props.isFocused) {
OneSignal.addEventListener('opened', () => console.log(this.props.navigation.state.routeName));
}
}
**问题: **
当我返回时触发了这个条件isFocused,所以到达了代码块,但是没有成功添加事件监听器。screenAaddEventListener
有谁知道我该如何解决这个问题?