2017-01-14 45 views
0

这些都是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; 
    } 
} 

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

+0

您是否在使用中间件? –

+0

@UG_ - 从'redux-thunk'还原thunk导入thunk;/applyMiddleware(thunk) –

+2

基本上“错误”不是函数。从查看axios API文档,我没有看到这一点。你尝试“抓”而不是“错误”?这就是Axios README文件中使用的。 – aarosil

回答

2

此TypeError表示“错误”不是函数 - 这正是问题所在。

你可以用catch函数链接来捕捉错误,没有error函数。

有关详细信息,请参阅API文档 Handling Errors

0

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

+0

我认为如果动作创建者的常量定义得很好,那么它仍然可以工作,只是它不会被减速器捕获。 –

+0

不幸的是,我更新并仍然遇到同样的错误。虽然感谢您的光临!盯着同样的问题几个小时会导致这样的愚蠢错误! –

+1

@ UG_3这是有道理的。 @Noah没问题。我曾经有过这个相同的问题,这是我在上面指出的确切问题。我很抱歉我的回答没有奏效。我没有太多的axios经验,但是基于文档,函数'catch'用在你使用'error'的地方。尝试改变这个?错误是说'错误'不是一个函数。你的代码中的所有内容对我来说都很好。 –