使用Axios

时间:2017-01-14 05:10:55

标签: reactjs redux axios

这些是sessionActions中的操作:

// Absolute imports
import axios from 'axios';

// Relative imports
import * as types from './actionTypes';
import auth from '../auth/authenticator';
import { ROOT_URL } from './constants';

export function loginUser(formValues) {
  return function (dispatch) {
    return axios.post(`${ROOT_URL}/login`, formValues)
      .then((response) => {
        dispatch(loginSuccess(response.data));
      })
      .error((response) => {
        dispatch(loginFailure(response.data));
      });
  }
}

export function loginSuccess(user) {
  return {
    type: types.LOG_IN_SUCCESS,
    payload: user
  };
}

export function loginFailure(error) {
  return {
    type: types.LOG_IN_FAILURE,
    payload: error
  };
}

当我触发操作时,我收到以下错误:

Uncaught TypeError: _axios2.default.post(...).then(...).error is not a function

我似乎无法弄清楚出了什么问题...下面的其他信息:

"axios": "^0.15.3",

我整天都被困在这里,似乎无法找到任何能引导我找到解决方案的信息......

也发布我的sessionReducer:

// Absolute imports
import { browserHistory } from 'react-router';

// Relative imports
import * as types from '../actions/actionTypes';

const INITIAL_STATE = { user: null, status: null, error: null, loading: false };

export default function sessionReducer(state = INITIAL_STATE, action) {
  let error;

  switch (action.type) {
    case types.LOG_IN_SUCCESS:
      browserHistory.push('/dashboard');
      return { ...state, user: action.payload.user, status: 'authenticated', error: null, loading: false };

    case types.LOG_IN_FAILURE:
      error = action.payload.data || { message: action.payload.message };
      return { ...state, user: null, status: 'sign-in', error: error, loading: false };

    case types.LOG_OUT:
      return { ...state, user: null, status: 'logout', error: null, loading: false };

    default:
      return state;
  }
}

我还应该注意,我可以在此过程中的多个点处输入调试器,并查看返回的正确有效负载。只是无法弄清楚错误发生的原因并停止整个过程。

2 个答案:

答案 0 :(得分:2)

此TypeError表示"错误"不是一个功能 - 这正是问题所在。

您可以使用catch函数进行链接以捕获错误,但没有error函数。

此处的详细信息可以在{docon} Handling Errors

的API文档中看到

答案 1 :(得分:0)

在您的动作创建者中,您使用常量types.SIGNIN_USER_SUCCESS,type: types.SIGNIN_USER_FAILURE,,在减速器中,您使用常量types.LOG_IN_SUCCESS:case types.LOG_IN_FAILURE:。这些不匹配因此会引发错误。我假设你不是故意这样做的。