作为导航设置的解决方法,我最终必须导航到子导航器,然后导航到该导航器上的路线(我从父导航器转到子导航器)。最初加载子导航器时,它会加载CameraScreen.js
,但我需要使用RentableScreen.js
进入CameraScreen.js
,这是儿童导航器上的一个屏幕。我用CameraScreen.js
从主要的RentableScreen.js
导航仪(App
)到达HomeScreen.js
。我这样做的方式是使用addListener
来监听页面聚焦时,它获取参数,告诉它继续RentableScreen.js
然后导航到RentableScreen.js
- 代码如下:
CameraScreen.js
...
componentDidMount() {
this._sub = this.props.navigation.addListener(
'didFocus',
() => {
if(this.props.navigation.getParam('param', '') === 'RentTab') {
console.log('I HEARD YOU');
this.navigator && this.navigator.dispatch(
NavigationActions.navigate({
routeName: 'Rentable',
})
);
}
}
);
}
...
这一切都正常,但似乎我传递的参数被“卡住”CameraScreen.js
,因为下次我尝试导航到它(通过按下TabNavigator
上的一个标签)它就像我发送它的参数一样收到之前,但我不是。似乎参数正在保存/保存在某个地方 - 我该如何清除它?或者我怎样才能让addListener
在来自TabNavigator
时不注意?
这段代码符合我的要求:
componentDidMount() {
this._sub = this.props.navigation.addListener(
'didFocus',
() => {
if(this.props.navigation.getParam('param', '') === 'RentTab') {
this.navigator && this.navigator.dispatch(
NavigationActions.navigate({
routeName: 'Rentable',
})
);
this.props.navigation.state.params = null; //THIS CLEARS THE STATE PARAMS HOW I WAS DESCRIBING
}
}
);
}