我们在我们的本机应用程序中使用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错误:没有为密钥定义路由 仪表板屏幕。必须为以下之一:'StackNavigator','ModalNavigator'
答案 0 :(得分:0)
由于这个问题似乎没有得到很好的记录或在其他地方回答过,所以是
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
的正确堆栈,然后添加一个子操作,在其中可以指定该导航器的屏幕,即{{1} }。
仅供参考,弹出或返回时我们可以使用
LoginScreen
其中n是要弹出或一直弹出的屏幕数:
this.props.navigation.dispatch(StackActions.pop({ n:1 }));