Реагируйте на встроенную навигацию с помощью избыточного действия - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть эта проблема. В моем приложении React Native после входа в систему пользователь получает сообщение от сервера, информирующее его о роли, которую он играет в приложении (учитель, ученик), и в соответствии с этой ролью отображается другой пользовательский интерфейс. Дело в том, что мое действие по входу в систему отправляется через Redux (и я сохраняю некоторые вещи из ответа на redux), и я хочу перейти на разные экраны в соответствии с этим ответом сервера, но я не могу перейти от создателя действий redux. Я пытался найти решение из официальных документов https://reactnavigation.org/docs/navigating-without-navigation-prop/, но получаю эту ошибку: объект 'навигация' еще не инициализирован. Есть ли другой способ навигации после ответа от сервера, НО в соответствии с ним из-за действия приставки? Спасибо! Мое действие:

export const loginmyapp = (email, password) => {
  return async dispatch => {
    const response = await fetch(
      'http://147.175.121.250:80/authenticate/login',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          email: email,
          password: password
        })
      }
    );

    if (!response.ok) {
      const errorResData = await response.json();
      console.log(errorResData);
      const errorId = errorResData.error.message;
      let message = 'Something went wrong!';
      if (errorId === 'EMAIL_NOT_FOUND') {
        message = 'Entered email not found!';
      } else if (errorId === 'INVALID_PASSWORD') {
        message = 'Entered password is not valid!';
      }
      throw new Error(message);
    }
    const resData = await response.json();
    console.log(resData);

    dispatch({
      type: LOGINMYAPP,
      token: resData.jwtToken,
      relationId: resData.relationIDd,
      info: resData.info
    });
    RootNavigation.navigate('SignedInZiak');
  };
};

Я знаю, что здесь я буду обрабатывать ответ с помощью ifchecks, но просто этот .navigate не работает. Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

1 голос
/ 06 апреля 2020

Навигация по редукционным действиям - не лучший способ сделать это.

Я предлагаю следующее:

Добавьте User Reducer с ролью атрибута, которая является ответом от бэкэнда (учителя или студент)

Добавить экран загрузки (начальный root в приложении после входа в систему) и подключить его к состоянию пользователя с помощью mapStateToProps

Добавить функцию componentDidMount и проверить роль пользователя и перейти к экран, который вы хотите!

...