【问题标题】:React Native navigating between Nested StackNavigator在嵌套 StackNavigator 之间进行 React Native 导航
【发布时间】:2019-07-09 07:50:43
【问题描述】:

我有下面的三个导航器,我在登录完成后导航到仪表板屏幕,但是当我想从仪表板屏幕注销时遇到问题,this.props.navigation.navigate('Login ') 工作正常,但我想在按下退出按钮时清除堆栈。

const DashBoardStackNavigator = createStackNavigator({
      DashBoard: DashBoard,
      Second:Second,
      Third:Third
    })


const BottomTabNavigator = createBottomTabNavigator({
  DashBoardStackNavigator,
  Account,
  Report,
  Members
}})

const AppStackNavigator = createStackNavigator({
  Login: Login,
  BottomTabNavigator: BottomTabNavigator

})


export default createAppContainer(AppStackNavigator)

我尝试了以下没有运气

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'Login' })],
});
this.props.navigation.dispatch(resetAction);

错误:没有为键登录定义路由,必须是其中之一 仪表板

【问题讨论】:

  • 尝试将 'key: null' 添加到您的 StackActions.reset。看看它是否有效
  • 它不工作
  • 试试这个,this.props.navigation.dispatch(StackActions.popToTop()) 这将弹出除第一个屏幕之外的所有屏幕。
  • 当我导航到仪表板屏幕时,我已经重置了堆栈并且仪表板是第一个屏幕,因为我不希望用户在登录后导航回登录屏幕。
  • 同样的问题,你找到解决办法了吗? @basilsatti

标签: reactjs react-native navigation react-navigation


【解决方案1】:

试试这个

 const navigateAction = StackActions.reset({
            index: 0,
            key: null,
            actions: [NavigationActions.navigate({ routeName: 'Login' })]
        })
        this.props.navigation.dispatch(navigateAction)

【讨论】:

    【解决方案2】:

    我建议你使用SwitchNavigator,正如以下官方文档所建议的那样:https://reactnavigation.org/docs/en/auth-flow.html

    在您的情况下,只需将最后一个 StackNavigator 替换为 SwitchNavigator:

    const DashBoardStackNavigator = createStackNavigator({
          DashBoard: DashBoard,
          Second:Second,
          Third:Third
        })
    
    
    const BottomTabNavigator = createBottomTabNavigator({
      DashBoardStackNavigator,
      Account,
      Report,
      Members
    }})
    
    const AppStackNavigator = createSwitchNavigator({
      Login: Login,
      BottomTabNavigator: BottomTabNavigator
    
    })
    
    
    export default createAppContainer(AppStackNavigator) 
    

    然后只需导航到登录:

    this.props.navigation.navigate('Login')
    

    当你在bottomTabNavigator堆栈和登录堆栈之间切换时,它会自动重置堆栈,阻止两者之间的所有返回操作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多