Как сбросить настройки навигатора с помощью NavigationService в React Navigation? - PullRequest
0 голосов
/ 02 апреля 2019

Я использую NavigationService метод в React Navigation при разработке моих приложений.У меня есть страница авторизации, которая разработана с Redux.Когда пользователь заходит на страницу аутентификации, страница связывается с главной страницей.

Но я могу вернуться на страницу авторизации с помощью скольжения (в IOS) или нажатия кнопки «назад» (в Android).Как я могу сбросить навигатор после того, как пользователь вошел в систему или прошел страницу авторизации?

Вот моя функция для процесса входа в систему ниже:

const loginSuccess = (dispatch, user) => {

   console.log('LOGINSUCCESS --> OK!');
  return dispatch => {
    NavigationService.navigate('Main');
    dispatch({
      type: LOGIN_USER_SUCCESS,
      payload: user,
    });
  };
};

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Я решил эту проблему.

Прежде всего, я хочу показать мои NavigationService.js коды ниже:

import { NavigationActions, StackActions } from "react-navigation";

let _navigator;

function setTopLevelNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

function navigate(routeName, params) {
  _navigator.dispatch(
    NavigationActions.navigate({
      routeName,
      params,
    }),
  );
}

// add other navigation functions that you need and export them

export default {
  navigate,
  navigateReset,
  setTopLevelNavigator,
};

Затем я добавил несколько кодов для сброса навигатора. (Это означает, что когда вы переходите к следующему экрану, но больше не возвращаетесь с помощью прокрутки или кнопки «Назад» на Android.)

function navigateReset(routeName, params) {
  _navigator.dispatch(
    StackActions.reset({
      index: 0,
      actions: [
        NavigationActions.navigate({
          routeName,
          params,
        }),
      ],
    }),
  );
}

Наконец, я отредактировал свой код действия с новой функцией:

const loginSuccess = (dispatch, user) => {
  firebase
    .database()
    .ref('/users/' + user.user.uid)
    .once('value')
    .then((snapshot) => {
      dispatch({
        type: LOGIN_USER_SUCCESS,
        payload: user,
        myUser: {
          uid: user.user.uid,
          email: user.user.email,
          name: snapshot.val().displayName,
          groups: snapshot.val().groups,
        },
      });
    });

  dispatch(() => {
    NavigationService.navigateReset('Main'); // Edited code.
  });

  console.log('LOGINSUCCESS --> OK!');
};

Таа таа! Congrulations! Теперь вы никогда не возвращаетесь к экрану входа в систему после входа в систему.

0 голосов
/ 04 апреля 2019

Не требует возврата из метода.Он будет непосредственно перемещаться на определенный экран.

dispatch(
    NavigationService.navigate('Main')
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...