Реагируйте с навигацией v4 на v5 - PullRequest
0 голосов
/ 13 марта 2020

Итак, я в настоящее время на Navigation v4, используя SwitchNavigator. Я хочу перейти на v5, но не могу заставить его работать. У меня есть 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
        }
      }
    ))
}

Итак, когда впервые отображается экран Условия вверх и нажмите Next, затем я автоматически перехожу к Auth, и если я нажимаю кнопку android back, приложение закрывается, потому что стек 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;

В чем именно проблема?

...