Преобразование действий извлечения в действия аксиоса - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь обновить свои действия до axios from fetch.

Например, мой текущий логин выглядит так:

export const login = (email, password) => {
  return (dispatch) => {
    dispatch({
      type: 'CLEAR_MESSAGES'
    });
    return fetch('/login', {
      method: 'post',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        email: email,
        password: password
      })
    }).then((response) => {
      if (response.ok) {
        return response.json().then((json) => {
          dispatch({
            type: 'LOGIN_SUCCESS',
            token: json.token,
            user: json.user
          });
          cookie.save('token', json.token, { expires: moment().add(1, 'hour').toDate() });
          browserHistory.push('/account');
        });
      } else {
        return response.json().then((json) => {
          dispatch({
            type: 'LOGIN_FAILURE',
            messages: Array.isArray(json) ? json : [json]
          });
        });
      }
    });
  };
}

Пока что для преобразования в axios у меня есть это:

export const login = (email, password) => {
    // const { email, password } = this.props;

    (dispatch) => {
    dispatch({
        type: 'CLEAR_MESSAGES'
    })
    axios({
        method: 'post',
        url: '/login',
        data: { email: email, password: password }
    }).then((response) => {
        dispatch({
        type: 'LOGIN_SUCCESS',
        token: json.token,
        user: json.user
        });
        cookie.save('token', json.token, { expires: moment().add(1, 'hour').toDate() });
        browserHistory.push('/account');
    })
    .catch(() => dispatch({
        type: 'LOGIN_FAILURE',
        messages: Array.isArray(json) ? json : [json]
        })
    )
}}

Это не работает :( и я не уверен, что делаю неправильно - не слишком знаком с axios.

Я получаю эту ошибку в консоли Google Chrome

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вам необходимо получить доступ к данным через response.data. При использовании fetch() имело смысл преобразовать ответ с помощью response.json() и использовать thenable для подключения к этому json, но с помощью axios вы можете сразу получить ответ без каких-либо преобразований.

export const login = (email, password) => {
    return (dispatch) => {
        dispatch({
           type: 'CLEAR_MESSAGES'
        })

axios.post("/login", {email, password}).then((response) => {
    dispatch({
       type: 'LOGIN_SUCCESS',
       token: response.data.token,
       user: response.data.user
    });
    cookie.save('token', json.token, { expires: moment().add(1, 'hour').toDate() });
    browserHistory.push('/account');
})
.catch(() => dispatch({
    type: 'LOGIN_FAILURE',
    messages: Array.isArray(json) ? json : [json]
    })
)
0 голосов
/ 26 июня 2019

Я считаю, что ошибка в том, что вы вызываете переменную json, которой нет в вашем обновленном коде.

...