2017-01-14 73 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'的地方。嘗試改變這個?錯誤是說'錯誤'不是一個函數。你的代碼中的所有內容對我來說都很好。 –