Reac-navigation 5 с AuthContext и 2 Stack Navigator: циклический и флэш-экраны

Вот основное приложение (Expo sdk36 с реактивной навигацией 5):

<Provider store={store}>
   <AuthContext.Provider value={authContext}>
      <NavigationContainer
        onStateChange={(stateNavigation) => console.log('New stateNavigation is', stateNavigation, state)}
      >
        <SafeAreaProvider>
          <Stack.Navigator screenOptions={{ headerShown: false }}>
            {state.isLoading ? (
              <Stack.Screen name="Loading" component={AppLoadingScreen} />
            ) : state.profile === null ? (
              // No status, user isn't signed in
              <Stack.Screen name="SignInScreen" component={SignInScreen} />
            ) : (
              // User is signed in
              <Stack.Screen name="HomeScreen" component={HomeScreen} />
            )}
          </Stack.Navigator>
        </SafeAreaProvider>
      </NavigationContainer>
    </AuthContext.Provider>
</Provider>

SignInScreen и HomeScreen - это ScreenNavigator:

function SignInScreen() {
    const { signIn } = React.useContext(AuthContext);
    return (
      <Stack.Navigator screenOptions={{ headerShown: false }}>
        <Stack.Screen name="SignIn">
          {(props) => <SignIn {...props} signIn={signIn} />}
        </Stack.Screen>
      </Stack.Navigator>
    );
  }

  function HomeScreen() {
    const { signOut } = React.useContext(AuthContext);
    return (
      <Stack.Navigator screenOptions={{ headerShown: false }}>
        <Stack.Screen name="Home">{(props) => <Home {...props} />}</Stack.Screen>
        <Stack.Screen name="Profile">
          {(props) => <Profile {...props} signOut={() => signOut()} />}
        </Stack.Screen>
      </Stack.Navigator>
    );
  }

Он начинается с входа в систему, я вхожу в систему, он переходит на главную, я нажимаю кнопку «Профиль», и экран профиля обновляется на неопределенный срок. Я могу нажать кнопку «Выход», и она перейдет на экран входа в систему (здесь снова несколько вспышек). Полный журнал stateNavigation и состояния находится здесь: https://gist.github.com/lc3t35/d32fcd5ef6d1 / а>

Любая идея приветствуется.


person Laurent Roger    schedule 20.02.2020    source источник
comment
Вы можете поделиться своим полным кодом? Невозможно узнать, что происходит, не глядя на то, что находится в ваших компонентах.   -  person satya164    schedule 21.02.2020
comment
@ satya164 Конечно, нет, я не могу поделиться полным кодом, иначе я бы сделал доступным полное репо;) Это миграция с React Navigation 4. Итак, судя по тому, что вы видели выше, на этом уровне нет ничего плохого. ?   -  person Laurent Roger    schedule 21.02.2020
comment
Нет необходимости делиться своим полным кодом, поделитесь своим компонентом Profile, так как именно здесь он начинается. И нет, пока ничего явно не так. Кроме того, не очень хорошая идея делиться своими журналами таким образом, чтобы можно было поделиться некоторыми конфиденциальными данными, даже если они находятся в разработке.   -  person Nick Rameau    schedule 22.02.2020


Ответы (1)


Между <Provider> и <AuthContext.provider> у меня также есть <ReduxNetworkProvider> от react-native-offline. Кажется, он запускает свойства NavigationContainer .... Я удалил его, и приложение работает лучше (несмотря на то, что некоторые подозрительные обновления все еще активны ...) Подробнее об этом ....

person Laurent Roger    schedule 24.02.2020