React Native Switch Navigator:goBack()不起作用

时间:2019-03-04 10:51:49

标签: react-native react-native-navigation

我有一个切换导航器:

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”,而不是返回到屏幕的状态。

2 个答案:

答案 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