Реагирующее нативное диспетчерское действие в последовательности для redux-saga - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть экран входа в систему, вызывающий следующую функцию, которая отправляет реду-сагу действие «вход в систему» ​​и перенаправляет после входа в систему.

_login = async (provider, username, password) => {
  try {
    if (provider === 'local') {
      await this.props.login(username, password);
      await this.props.navigation.navigate('App');
    }
}

Ниже приведена отправка моей функции входа в систему.для redux-saga.

const mapDispatchToProps = dispatch => {
  return {
    login: (identifier, password) => dispatch({ type: "LOGIN", identifier: identifier, password: password }),
  }
}

На моей домашней странице у меня есть следующий componentDidMount, чтобы проверить SecureStore на наличие любого токена JWT.Если он был недоступен, пользователь будет перенаправлен обратно на экран входа в систему.

componentDidMount() {
  try {
    SecureStore.getItemAsync('authUser').then(resp => {
      if (!resp) {
        this.props.navigation.navigate('Auth');
      }
    });
  } catch (error) {
  }
}

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

Я попытался выполнить следующее, но получил сообщение об ошибке, утверждая, что «имя входа» не является функцией.

this.props.login(username, password).then(resp => {
)};

Является лиожидание не работает должным образом, или это мой код?

ОБНОВЛЕНИЕ:

Похоже, мы не можем отправлять действие и ждать результата через ожидание.Поэтому я переместил навигацию в componentDidUpdate.Это единственный способ?

componentDidUpdate() {
  if (this.props.loggedIn === true) {
    this.props.navigation.navigate('App');
  }
}
...