我有一个切换导航器:
export default createSwitchNavigator({
AuthLoading: AuthLoadingScreen,
EditProfile: EditProfileScreen,
Login: LoginScreen,
Register: RegisterScreen,
ForgotPassword: ForgotPasswordScreen,
Main: MainTabNavigator,
MainLoading: MainLoadingScreen,
TripReport: TripReportScreen,
},
{
initialRouteName: 'AuthLoading',
});
当我使用标签导航器“ Main”时,我有一个按钮可将我导航到“ TripReport”屏幕:
onPress={() => navigation.navigate('TripReport', {tripReport: tripReport})}
在TripReportScreen上时,我为Android后退按钮添加了一个事件侦听器,以返回到“主”,也返回到特定的选项卡:
componentDidMount() {
// Add event listener for the Android back button.
BackHandler.addEventListener("hardwareBackPress", () => {
this.props.navigation.goBack(null);
return true
})
}
goBack函数不起作用。我使它起作用的唯一方法是
navigation.navigate('Main)
,但这会重新加载“ Main”,而不是返回到屏幕的状态。
答案 0 :(得分:0)
是的,这是正确的行为。 如果我必须引用reactnavigation
(可选)提供一个密钥,该密钥指定要返回的路线。默认情况下,goBack将关闭从其调用的路由。如果目标是返回任何地方而不指定要关闭的对象,请调用.goBack(null);。请注意,如果子级导航器在堆栈中仅包含一项,则null参数对于嵌套的StackNavigator很有用,可在父级导航器上返回。
这仅适用于StackNavigators
。
希望这会有所帮助。
答案 1 :(得分:0)
那是因为当您在this.props.navigation.goBack
上呼叫Main
时,this.props.navigation
实际上是指您的MainTabNavigator
。这就是为什么后退动作不起作用的原因。
您需要到达正确的SwitchNavigator
才能向您的back
派发一个SwitchNavigator
动作,并查看几种suggested on this thread的方法。
或者,您也可以创建对switchNavigator
的引用,请在此处查看此答案
https://stackoverflow.com/a/54878858/2963461