所以,我目前正在使用 SwitchNavigator 使用 Navigation v4。我想迁移到 v5,但我无法让它像 Switch 一样工作。我有 3 个堆栈,AuthStack(堆栈导航器)、TabScreens(它是一个底部导航器)、术语(只是一个屏幕),我的 v4 配置是这样的:
const createRootNavigator = (signedIn = false, terms) => {
return createAppContainer(
createSwitchNavigator(
{
Auth: { screen: AuthStack, path: 'auth' },
App: { screen: TabScreens, path: 'app' },
Terms: { screen: Terms }
},
{
initialRouteName: !signedIn ? !terms ? 'Terms' : 'Auth' : 'App',
headerMode: 'none',
defaultNavigationOptions: {
gestureEnabled: false
}
}
))
}
因此,当条款屏幕第一次出现并按下一步时,我会自动导航到 Auth,如果我按下 android 后退按钮,则应用程序将关闭,因为 Auth 堆栈是主堆栈。但是在 v5 上不会发生同样的情况。我有一个错误The action 'NAVIGATE' with payload {"name":"Auth"} was not handled by any navigator. Do you have a screen named 'Auth'?
我正在进行的 v5 配置是这样的:
const AuthStack = createStackNavigator();
const Auth = () => (
<AuthStack.Navigator
initialRouteName={"SignIn"}>
<AuthStack.Screen
name={"SignIn"}
component={SignIn}
screenOptions={{ gestureEnabled: false }}
options={{ headerShown: false }}
/>
</AuthStack.Navigator>
)
const TermsStack = createStackNavigator();
const TermsScreen = () => (
<TermsStack.Navigator
initialRouteName={"Terms"}>
<TermsStack.Screen
name={"Terms"}
component={Terms}
screenOptions={{ gestureEnabled: false }}
options={{ headerShown: false }}
/>
</TermsStack.Navigator>
)
const RootScreens = () => {
const signedIn = mySDK.isAuthorized();
const terms = myApi.getTerms();
return (
<NavigationContainer>
{!signedIn ?
<>
{!terms ?
<TermsScreen />
:
<Auth />
}
</>
:
// <App />
<Auth />
}
</NavigationContainer>
)
};
export default RootScreens;
究竟是什么问题?