react-native - 如何使用 react-navigation 重置到不同的堆栈
问题描述
我们在我们的 react native 应用程序中使用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 错误:没有为关键 DashboardScreen 定义路由。必须是以下之一:'StackNavigator'、'ModalNavigator'
解决方案
由于这个问题似乎没有很好的记录或在这里的其他地方得到回答
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
,然后我们添加一个子操作,我们可以在其中指定该导航器的屏幕,即LoginScreen
。
仅供将来参考,弹出或返回我们可以使用
this.props.navigation.dispatch(StackActions.pop({ n:1 }));
其中 n 是要弹出的屏幕数量,或者只是一直播放的屏幕数量:
this.props.navigation.dispatch(StackActions.popToTop());
推荐阅读
- reactjs - 使用导航从一个页面导航到另一个页面以响应本机
- c# - 脚本抛出带有语法错误消息的 MySqlException
- javascript - 为 HOC 编写流 libdef
- python - 从Excel工作表中如何提取满足条件的特定行
- node.js - firebase 函数中的“firebase serve”未运行最新更改
- xcode - 有没有办法在 Xcode 中更改 Safari 应用程序扩展的名称?
- php - 如何在 echo php 中的 html 表单中显示 php 变量详细信息?
- angular5 - 在 PrimeNG 中过滤数据表
- java - 如何使用 docker 镜像从另一个微服务调用一个微服务
- java - 使用 OBJ 文件生成 SFB 文件时,导入 Sceneform 资产选项会出错