React Native очистить предыдущий экран из стека навигации - PullRequest
0 голосов
/ 08 июня 2019

Я разрабатываю приложение React для обучения. Я сейчас реализую навигацию с помощью React Navigation. Я использую стековую навигацию. Но я не могу найти способ удалить предыдущий экран из истории навигации и убить приложение.

Я настроил свою навигацию следующим образом.

const AppStack = createStackNavigator({
  Login: {
    screen: Login
  },
  Register: {
    screen: Register
  },
  Events: {
    screen: Events
  }
});

Как видно из приведенного выше кода, я по умолчанию открываю экран входа в систему. После входа в систему я открываю экран «События» следующим образом.

this.props.navigation.navigate('Events');

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

Ответы [ 2 ]

4 голосов
/ 08 июня 2019

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

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

и дополнительно на странице Event необходимо добавить один статический метод, если вы не хотите, чтобы там был заголовок.

static navigationOptions = navigation => ({
        header: null
});

Надеюсь, это поможет вам.

0 голосов
/ 08 июня 2019

Что вам нужно, это функция сброса

import {NavigationActions} from 'react-navigation';

this.props.navigation.dispatch(NavigationActions.reset({
     index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'Events' })]
 }));
...