Задать вопрос
@Denis1205

Почему не срабатывает асинхронность?

У меня есть форма для входа/регистрации, я хочу что бы если апи возвращает ошибку в форме отображалось сообщение.
Но я не могу разобраться в асинхронностью в редаксе (использую redux-thunk), я добавил
applyMiddleware(thunk), вот мой сабмит хендлер в компоненте формы:
,
const handleSubmit =  (event) => {
        event.preventDefault();

        if (form.login) {
            dispatch(loginUser(form))
        } else {
            dispatch(registerUser(form))
        }

        if(user.error!== null){ // вот этот код не срабатывает с первого раза, в user.error ещё не успело записаться сообщение с ошибкой
            setError(user.error.message); 
        }
    }

action
export const loginUser = (form) => dispatch => {

   return $api.post(API_PATH.authUser, { // axios response
        password: form.password,
        email: form.email
    }).then(res => {
            const { token } = res.data;
            localStorage.setItem('jwtToken', token);
            dispatch({
                type: LOGIN_SUCCESS,
                payload: token
            });
        })
        .catch(err => {
            dispatch({
                type: LOGIN_ERROR,
                payload: err.response.data
            });
        });
};

Что делаю не так?
П.С. я понимаю что проверка идёт раньше чем редьюсер срабатывает, я по этому и спрашиваю, потому что думал что redux-thunk должен решать этот момент, я в комментарии написал как я решил проблему, но мне кажется, это не лучший, подход, поправьте как лучше бы написать
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы