从抽屉重置反应导航堆栈

时间:2017-08-04 16:59:06

标签: react-native react-navigation

官方react-navigation github上发布了很多问题:https://github.com/react-community/react-navigation/issues但是没有人给出真正的解决方案,包括一篇帖子说“嘿伙计们,看看这个问题,很多问题”:{ {3}}没有回答。

基本上:我有DrawerNavigator一些嵌套StackNavigator

export const MainNavigator = DrawerNavigator(
    {
        OrderNew: {
            screen: OrderNew,
            navigationOptions: {
                drawerLabel: DrawerLabel('New Order')
            }
        },
        Orders: {
            screen: OrderNavigator, //a StackNavigator
            navigationOptions: {
                drawerLabel: DrawerLabel('Orders')
            }
        },
        MenuNavigator: {
            screen: MenuNavigator, //a StackNavigator
            navigationOptions: {
                drawerLabel: DrawerLabel('Menu')
            }
        },
    //more screens...
    {
        initialRouteName: 'Orders',
        drawerPosition: 'right',
        contentComponent: props => <ScrollView style={{backgroundColor: 'rgba(227, 100, 29, .95)'}}><DrawerMenu state={props} /></ScrollView>,
    }
);

所以,我正在使用我自己的菜单组件传递contentComponent。我的想法是覆盖onItemPress组件的DrawerItems事件并将我的逻辑放在这里。

我想要的是:每当用户按下该项目时,我想重置MenuNavigator(以及其他堆栈屏幕)。我只是无法做到这一点。正如我所说,我尝试了很多代码。实际上,就像这样:

onItemPress={
    router => {
        const navigateAction = NavigationActions.navigate({
            routeName: router.route.routeName,
        });

        this.props.state.navigation.dispatch(navigateAction);
    }
}

以上代码有效,我可以浏览抽屉项目。现在,在我的脑海中,我应该将子动作重置为导航器上的第一个项目。所以我试过了:

onItemPress={
    router => {
        const navigateAction = NavigationActions.navigate({
            routeName: router.route.routeName,
            action: NavigationActions.reset({
                index: 0,
                actions: [
                    NavigationActions.navigate({routeName: router.route.routes[0].routeName}),
                ]
            })
        });

        this.props.state.navigation.dispatch(navigateAction);
    }
}

爆炸出错:

  

没有为关键菜单定义路线。   必须是以下之一:'订单','OrderClient'

总结:当我导航到另一个StackNavigator的项目时,如何重置DrawerNavigator

1 个答案:

答案 0 :(得分:-1)

您缺少密钥:空。

导航动作应如下所示。

 action: NavigationActions.reset({
                index: 0,
                key: null,   
                actions: [
                    NavigationActions.navigate({routeName: router.route.routes[0].routeName}),
                ]
            })