官方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
?
答案 0 :(得分:-1)
您缺少密钥:空。
导航动作应如下所示。
action: NavigationActions.reset({
index: 0,
key: null,
actions: [
NavigationActions.navigate({routeName: router.route.routes[0].routeName}),
]
})