如何在react-navigation中返回父屏幕?

时间:2017-12-07 15:21:03

标签: react-native react-navigation

问题

RootTabNavigator
    | Auth Screen
    | Welcome Screen
    | MainTabNavigator 
              | FeedStacknavigator
                       | Screen A

              | MenuStackNavigator 
                       | Screen B <-I'm here and want to reset to 'Auth Screen'

树形结构显示了我应用的导航结构。我在屏幕B&#39;并想回到Auth Screen。 (NOT Navigate)当我导航到Auth Screen时,它会创建新的Auth Screen,我想避免它。

if ( ... ) {
      // I'm getting undefined error here
      nextProps.navigation.reset('Autho'); 

为什么不起作用?

可能的解决方案1:重置

  const resetAction = NavigationActions.reset({
      index: 0,
      actions: [
          // getting error because auth screen is not in MenuStacknavigator. 
          NavigationActions.navigate({ routeName: 'Auth'})
      ]
  })
  this.props.navigation.dispatch(resetAction);

可能的解决方案#2:

  const backAction = NavigationActions.back({
    key: 'Autho'
  })
  # Back Action doesn't do anything
  this.props.navigation.dispatch(backAction); # not working

可能的解决方案#3:

发送自定义操作。 &lt; - StackNavigator有一些解决方案,但就我而言,它是TabNavigator。

2 个答案:

答案 0 :(得分:3)

请随时回答。我现在找到了一个简单的解决方案:

const backAction = NavigationActions.back({
    key: null
})
nextProps.navigation.dispatch(backAction);

答案 1 :(得分:1)

要重置为开头,我通常会使用:

NavigationActions.reset({
    index: 0, 
    actions: []
)

顺便说一句,更好的导航结构将是根据身份验证状态切换出多个选项卡导航器。在您的情况下,您可以在AuthTabNavigatorMainTabNavigator之间进行切换。

希望这有帮助!