如何处理嵌套在createDrawerNavigator中的createStackNavigator的屏幕的路由?

时间:2019-07-31 06:15:46

标签: react-native react-native-navigation

我在stacknavigator中有嵌套在DrawerNavigator中的屏幕。我想在单击时重新启动DrawerNavigator中的屏幕。

系统流程架构:

App.js ::

StackNavigator:

  1. Login.js
  2. ScreensSetup.js

ScreensSetup.js包含以下内容:

a。将屏幕堆叠为:

  const FirstStackNavigator = createStackNavigator({
    First: {
      screen: Dashboard,
    },
  });

  const SecondStackNavigator = createStackNavigator({
    Second: {
      screen: Workorders,
    },
  });

b。 DrawerNavigator嵌套在上面的堆叠屏幕中,如下所示:

  const DrawerNavigator = createDrawerNavigator({
    Dashboard: {
      screen: FirstStackNavigator,
    },
    Workorders: {
      screen: SecondStackNavigator,
    },
  },
  {
    contentComponent: DrawerContent ,
    initialRouteName: 'Dashboard',
  });

我可以通过以下方式从“ ScreensSetup”导航到“工作订单”:

  this.props.navigation.navigate('Workorders');

这很好用。

但是我需要重新启动屏幕。因此,我使用了: 重置ScreensSetup:

const navigateAction = StackActions.reset({
    index: 0,
    actions: [NavigationActions.navigate({ routeName: "ScreensSetup" })],
  });

  this.props.navigation.dispatch(navigateAction);

这很好用。

用于重置工作单:

const navigateAction = StackActions.reset({
    index: 0,
    actions: [NavigationActions.navigate({ routeName: "Workorders" })],
  });

  this.props.navigation.dispatch(navigateAction);

这给了我错误:

 Error: Error: There is no route defined for key Workorders.                        
    │ Must be one of: 'Login','ScreensSetup'

在抽屉式导航仪上单击菜单时,我只是想重置屏幕。我完全搞砸了这种导航。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想关闭所有屏幕并返回到开始,请使用popToTop'功能。

popToTop操作会将您带回到堆栈中的第一个屏幕,关闭所有其他屏幕。它在功能上与StackActions.pop({n: currentIndex})相同。

用法

import { StackActions } from 'react-navigation';

this.props.navigation.dispatch(StackActions.popToTop());