У меня есть экран входа в систему, вызывающий следующую функцию, которая отправляет реду-сагу действие «вход в систему» и перенаправляет после входа в систему.
_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');
}
}