React Navigation не будет повторно отображать навигатор стека после изменения состояния входа - PullRequest
0 голосов
/ 05 августа 2020

Внутри моего приложения. js, у меня есть навигатор стека, в который каждый объект Stack.Screen условно включен на основе логического isLoggedIn (из глобального контекста).

<NavigationContainer>
      <Stack.Navigator screenOptions={{
        headerStyle: {
          backgroundColor: '#7B1FA2',
        },
        headerTintColor: '#fff',
        headerTitleStyle: {
          fontWeight: 'bold',
        },
      }}>
        {loginContext.isLoggedIn == false ? (
         <>
        <Stack.Screen name='Landing' component={LandingTabs} options={{headerShown: false}}/>
        <Stack.Screen name='Home' component={HomeTabs} options={{title: "Bins"}}/>
        <Stack.Screen name='Login' component={Login}/>
        <Stack.Screen name='SelectFacilityScreen' component={SelectFacility} options={{title: "Select Storage Facility"}}/>
        <Stack.Screen name='InitialAppointmentScreen' component={InitialAppointment} options={{title: "Schedule Appointment"}}/>
        <Stack.Screen name='AccountInfoScreen' component={UserInfo} options={{title: "Create an Account"}}/>
        <Stack.Screen name='BillingInfoScreen' component={BillingInfo} options={{title: "Billing Info"}}/>
        </>
      ) : (
        <>
        <Stack.Screen name='Home' component={HomeTabs} options={{title: "Bins"}}/>
        <Stack.Screen name='StorageInventoryScreen' component={StorageInventory} options={{title: "Deliver"}}/>
        <Stack.Screen name='ScheduleAppointmentScreen' component={ScheduleAppointment} options={{title: "Schedule Appointment"}}/>
        <Stack.Screen name='ReviewScreen' component={Review} options={{title: "Review"}}/>
        <Stack.Screen name='ConfirmationScreen' component={Confirmation} options={{title: "Confirmation"}}/>
        <Stack.Screen name='HomeInventoryScreen' component={HomeInventory} options={{title: "Pickup"}}/>
        <Stack.Screen name='NewItemScreen' component={NewItem} options={{title: "Pickup"}}/>
        <Stack.Screen name='EditAccountScreen' component={Account}/>
        </>
      )}
      </Stack.Navigator>
    </NavigationContainer>

Внутри my App. js, у меня тоже есть навигатор вкладок. Намерение состоит в том, чтобы вложить его в навигатор стека, чтобы при посещении экрана Home в навигаторе стека он отображал навигатор вкладок.

<Tab.Navigator screenOptions={({ route }) => ({
          tabBarIcon: ({color}) => {
            let iconName;

            if (route.name === 'Home') {
              iconName = 'ios-home';
            } else if (route.name === 'Account') {
              iconName = 'ios-person';
            } else if (route.name === 'Orders') {
              iconName = 'ios-list';
            }

            return <Ionicons name={iconName} size={22} color={color} />;
          },
        })}
        tabBarOptions={{
          activeTintColor: 'white',
          inactiveTintColor: 'gray',
          style: {backgroundColor: '#7B1FA2'}
        }}
        initialRouteName='Home'
      >
      <Tab.Screen name="Orders" component={Orders}/>
      <Tab.Screen name="Home" component={Home}/>
      <Tab.Screen name="Account" component={Account}/>
    </Tab.Navigator>

Моя проблема возникает, когда Я пытаюсь выйти из системы. Находясь внутри компонента Account , который находится внутри навигатора вкладок, я пытаюсь обновить контекст isLoggedIn до false, чтобы навигатор стека повторно отображал экраны, чтобы включить Landing , и вы попадете на экран этого компонента. Я подтвердил, что когда isLoggedIn изменяется на false, навигатор стека включает посадку, но не переключается на этот экран. Я предполагаю, что я застрял в навигаторе вкладок. Как мне сделать так, чтобы, когда isLoggedIn становилось ложным, я оставлял компонент Account и возвращался в навигатор стека на компоненте Landing ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...