如何通过反应导航重置为其他堆栈

时间:2019-08-14 01:58:28

标签: react-native react-navigation

我们在我们的本机应用程序中使用react-navigation作为默认导航系统,该应用程序当前具有多个堆栈。我们想从一个堆栈中的屏幕导航到另一个堆栈中的屏幕。这是不同堆栈的基本示例:

const StackNavigator = createStackNavigator({
  SplashScreen: connectToStore(SplashScreen),
},{
  initialRouteName: 'SplashScreen',
  mode: 'card'
})

const ModalNavigator = createStackNavigator({
  LoginScreen: connectToStore(LoginScreen),
})

const AppNavigator = createStackNavigator({
  StackNavigator: StackNavigator,
  ModalNavigator: ModalNavigator,
}, {
  initialRouteName: 'StackNavigator',
  headerMode: 'none',
  mode: 'modal'
})

问题是,如果我们尝试像这样重置到新屏幕:

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

我们收到一条错误消息,如下所示:

  

ExceptionsManager.js:74错误:没有为密钥定义路由   仪表板屏幕。必须为以下之一:'StackNavigator','ModalNavigator'

1 个答案:

答案 0 :(得分:0)

由于这个问题似乎没有得到很好的记录或在其他地方回答过,所以是

const resetAction = StackActions.reset({
  index: 0,
  key: null,
  actions: [
    NavigationActions.navigate({
      routeName: 'ModalNavigator',
      action: NavigationActions.navigate({
        routeName:'LoginScreen', 
        params:{}
      })
    })
  ]
});
this.props.navigation.dispatch(resetAction);

首先,我们需要在resetTo的情况下指定要ModalNavigator的正确堆栈,然后添加一个子操作,在其中可以指定该导航器的屏幕,即{{1} }。

仅供参考,弹出或返回时我们可以使用

LoginScreen

其中n是要弹出或一直弹出的屏幕数:

this.props.navigation.dispatch(StackActions.pop({ n:1 }));