Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当退出抽屉中的子堆栈导航器时,如何使用react navigation转到initialRoute?_Javascript_React Native_React Navigation_React Navigation Stack_React Navigation Drawer - Fatal编程技术网

Javascript 当退出抽屉中的子堆栈导航器时,如何使用react navigation转到initialRoute?

Javascript 当退出抽屉中的子堆栈导航器时,如何使用react navigation转到initialRoute?,javascript,react-native,react-navigation,react-navigation-stack,react-navigation-drawer,Javascript,React Native,React Navigation,React Navigation Stack,React Navigation Drawer,我用react native、expo和react导航构建了一个应用程序。我有一个主抽屉导航器,其中有另外两个堆栈导航器。一个堆栈导航器有2页产品和产品。当我在Products页面中单击一个产品时,它会进入product页面。Ben如果我单击抽屉导航器中的另一个链接,我希望产品页面的堆栈导航器在离开堆栈导航器时返回到初始路径 我试图在退出堆栈导航器时设置initialState,当我单击抽屉导航器中的导航器链接时,它呈现initialState,但当我在子页面中并退出导航器时,它不起作用。当我再

我用react native、expo和react导航构建了一个应用程序。我有一个主抽屉导航器,其中有另外两个堆栈导航器。一个堆栈导航器有2页<代码>产品和产品。当我在
Products
页面中单击一个产品时,它会进入
product
页面。Ben如果我单击抽屉导航器中的另一个链接,我希望产品页面的堆栈导航器在离开堆栈导航器时返回到初始路径

我试图在退出堆栈导航器时设置initialState,当我单击抽屉导航器中的导航器链接时,它呈现initialState,但当我在子页面中并退出导航器时,它不起作用。当我再次单击抽屉中的
Products
时,它没有导航到
Products
页面,而是停留在
Product

我可以在抽屉导航器中创建静态链接,并使用
this.props.navigation.navigate
始终转到
this.props.navigation.navigate('Products')
,但这将是我最不想要的。我真的很喜欢我的抽屉导航器保持动态与我传递给它

组件将卸载
生命周期继续时,我尝试
this.props.navigation.navigate
,但没有成功

我该怎么做


谢谢你的帮助

是的,完全可以使用react导航重置堆栈,这有一个解决方案

下面是抽屉位于选项卡导航中的示例

首先,我们在
MenuDrawer.js
中定义抽屉,这里没有什么特别之处:

从“react navigation”导入{createDrawerNavigator};
从“/ProductStack”导入ProductStack;
从“/OtherStack”导入OtherStack;
const MenuDrawer=createDrawerNavigator({
产品:{
屏幕:ProductStack,
导航选项:{
抽屉标签:“我的产品”,
},
},
其他:{
屏幕:OtherStack,
导航选项:{
抽屉标签:“其他东西”,
},
},
});
导出默认菜单生成器;
最后,我们定义了选项卡导航,并使用
tabBarOnPress
导航选项来监听任何抽屉打开并在需要时重置堆栈:

从'react navigation'导入{createBottomTabNavigator,StackActions,NavigationActions};
从“/MenuDrawer”导入MenuDrawer;
const BottomTabs=createBottomTabNavigator({
菜单:{
屏幕:MenuDrawer,
导航选项:{
标题:“菜单”,
tabBarOnPress:({navigation})=>{
const notResetRoute=navigation.state.routes.find(x=>x.index>0);//检查堆栈是否未定位在第一个屏幕上
如果(不重置路由){
const resetAction=StackActions.reset({//我们重置了堆栈(参见文档)
索引:0,
行动:[
NavigationActions.navigate({routeName:notResetRoute.routes[0].routeName}),
],
});
导航、调度(重置动作);
}
navigation.openDrawer();//最后我们打开了抽屉
},
},
},
});
导出默认标签;

在这里,当用户单击相应的选项卡时,抽屉被打开。显然,如果抽屉的打开方式不同,例如通过点击给定屏幕上的按钮,也可以实现同样的效果。重要的是同时重置堆栈。

也许您不需要设置悬赏,而是希望向我们清楚地解释您的问题,包括图像和步骤、代码片段。99%的问题没有得到回答,因为他们写得很糟糕,因为这是一个非常简单的问题,当你知道的时候,每个导航员都可以在任何地方回答。这不是在我自己的代码中,而是一个更一般的问题。若你们读对了,我甚至建议了一种方法,我不想跟随,去做这个。嗨,我想你们能用v5来适应它吗?我贴了这个
import { NavigationActions } from 'react-navigation'

this.props.navigation.dispatch(NavigationActions.reset({
    index: 0,
    key: null,
    actions: [NavigationActions.navigate({ routeName: 'ParentStackScreen' })]
}))