だから、私は現在、SwitchNavigator を使用してナビゲーション v4 を使用しています。v5 に移行したいのですが、Switch のように動作させることができません。AuthStack(スタックナビゲーター)、TabScreens(下部ナビゲーター)、Terms(画面のみ)の3つのスタックがあり、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;
問題は正確には何ですか?