Сброс стека после перехода к экрану входа - PullRequest
2 голосов
/ 11 марта 2019

Я создаю мобильное приложение для реагирования, и у меня есть навигационный ящик с кнопкой выхода из системы.Я знаю, как перейти оттуда к экрану входа в систему, используя props.navigation.navigate('Login'), но проблема в том, что если пользователь делает это, он все равно может открыть ящик на экране входа в систему и вернуться обратно на один из других экранов или нажатькнопка «Назад» в Android.

Полагаю, я мог бы проверить на экране входа в систему, если пользователь зашел с другой страницы, а затем отключить кнопку «Открыть ящик», но это выглядит довольно странно.Мне было интересно, если есть правильный способ сделать это, возможно, сбросить стек по прибытии на вход в систему, я не уверен.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Ваша реализация не хороша. из деталей, которые вы дали, я думаю, что все ваши страницы только в одном stack. Я рекомендую вам разделить стеки аутентификации и приложений. для этого я очень рекомендую это: https://reactnavigation.org/docs/en/auth-flow.html

но сброс стека:

сброс

Действие сброса стирает все состояние навигации и заменяет его результат нескольких действий.

  • index - число - обязательный - Индекс активного маршрута в массиве маршрутов в состоянии навигации.
  • actions - array - required - Array of Navigation Действия, которые заменят состояние навигации.
  • клавиша - строка или ноль - опционально - если установлено, навигатор с данной клавишей будет сброшен. Если ноль, корневой навигатор будет сброшен.
import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'Profile' })],
});
this.props.navigation.dispatch(resetAction);

источник: https://reactnavigation.org/docs/en/stack-actions.html

0 голосов
/ 11 марта 2019

вам нужно сбросить ваш стек навигации при выходе из системы

сначала определите действие выхода из системы

const logoutAction = StackActions.reset({
    index: 0,
    actions: [NavigationActions.navigate({ routeName: 'Login' })],
});

затем при выходе из системы сделать

this.props.navigation.dispatch(logoutAction);
...