React Navigation v5 не сбрасывает и не удаляет предыдущие маршруты - PullRequest
1 голос
/ 29 февраля 2020

У меня есть экран входа, который я поместил в стек. После успешного входа в систему пользователь перенаправляется на домашний экран, который является экраном ящика. Одним из вариантов экрана ящика является выход из системы, поэтому при нажатии на него пользователь должен выйти из системы. Ниже приведен мой код для экрана выхода из системы. Я просто показываю индикатор выполнения экрана выхода из системы в пользовательском интерфейсе, но в useEffect ловушке, я вызываю следующий метод

navigation.navigate({index: 0, routes: [{name: LOGIN_SCREEN}]});

, но я получаю сообщение об ошибке You need to specify name or key when calling navigate with an object as the argument, и я перенаправлен на домашний экран , когда я полностью перезагружаю свое приложение, только оно переходит на экран входа в систему. Я передаю правильное значение для имени ключа.

Мой стек навигации выглядит следующим образом

 <Stack.Navigator>

      <Stack.Screen
        name={LOGIN_SCREEN}
        component={LoginScreen}
        options={{headerShown: false}}
      />
     <Stack.Screen
        name={HOME_STACK_SCREEN}
        component={DrawerStack}
        options={{headerShown: false}}
      />...

Мой компонент ящика выглядит следующим образом

<Drawer.Navigator
      drawerStyle={{backgroundColor: BLUE_COLOR_1}}
      drawerContentOptions={{labelStyle: {color: '#FFF'}}}>
      <Drawer.Screen
        name={HOME_SCREEN}
        component={Home}
        options={{
         ...
        }}
      />
     <Drawer.Screen
        name={LOGOUT_SCREEN}
        component={Logout}
        options={{
         ...
        }}
      />

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

В реакции-навигации v5. Вы можете сбросить навигацию, как это

import { CommonActions } from "@react-navigation/native";

this.props.navigation.dispatch(
     CommonActions.reset({
        index: 0,
        routes: [{ name: "LOGIN_SCREEN" }],
    })
);
1 голос
/ 01 марта 2020

Если вы хотите выполнить сброс, вам нужно использовать reset, а не navigate:

navigation.reset({
  routes: [{ name: LOGIN_SCREEN }]
});
...