Редуктор не вызывается после возврата действия? - PullRequest
1 голос
/ 10 октября 2019

Вот мой код действия для входа. Что я делаю неправильно ? Как видите, обновление состояния редуктора не вызывается.

Пожалуйста, помогите мне, ребята!

Реагируйте - 16.8 Axios Http Client Node и Mongo Db Backend

export const loginUser = (userData) => {
    axios.post(URL + '/api/admin/login', userData)
        .then(res => {
            return {
                type: SIGNIN_USER,
                payload: storeData
            }

        })
        .catch(err => {
            return {
                type: SHOW_MESSAGE,
                payload: err.response.data
            }
        });
};

Ответы [ 4 ]

1 голос
/ 10 октября 2019

Вам нужно отправить действие, а не просто вернуть объект:

const dispatch = useDispatch(); // Assuming you're inside functional component

export const loginUser = (userData) => {
    axios.post(URL + '/api/admin/login', userData)
        .then(res => {
            return dispatch({
                type: SIGNIN_USER,
                payload: storeData
            })

        })
        .catch(err => {
            return dispatch({
                type: SHOW_MESSAGE,
                payload: err.response.data
            })
        });
};
1 голос
/ 10 октября 2019

Попробуйте с этим примером кода:

export const loginUser = userData => dispatch => (
    axios.post(URL + '/api/admin/login', userData)
        .then(res => dispatch({ type: SIGNIN_USER, payload: res }))
        .catch(err => dispatch({ type: SHOW_MESSAGE, payload: err.response.data }))
)
1 голос
/ 10 октября 2019
    .then(res => {
        return {
            type: SIGNIN_USER,
            payload: storeData
        }

    })

Вместо возврата res, примените к нему действие здесь. Вы упомянули об изменении состояния, так что-то похожее:

    .then(res => {
        this.state.someResult = res;
    })
0 голосов
/ 11 октября 2019

Использование функций со стрелками улучшает читаемость кода. Нет необходимости возвращать что-либо в API.fetchComments, вызов API является асинхронным, когда запрос завершен, затем получит ответ, там вам нужно просто отправить тип и данные.

Ниже код выполняет ту же работу, используяфункций Arrow.

export const bindComments = postId => {
  return dispatch => {
    API.fetchComments(postId).then(comments => {
      dispatch({
        type: BIND_COMMENTS,
        comments,
        postId
      });
    });
  };
}; 

ссылка: React-Redux: Действия должны быть простыми объектами. Использовать пользовательское промежуточное ПО для асинхронных действий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...