在我的 React Native 应用程序中,我有两个屏幕screenA
和screenB
. 我正在使用react-navigation@4.x
,并且使用.screenA
screenB
this.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
,所以到达了代码块,但是没有成功添加事件监听器。screenA
addEventListener
有谁知道我该如何解决这个问题?