2017-01-14 6 views
0

Эти действия в sessionActions:Прием TypeError при выполнении действия Redux с помощью Вардар

// 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

Я могу» t, похоже, выяснить, что не так ... дополнительная информация ниже:

"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_ - редукция thunk import thunk из 'redux-thunk';/applyMiddleware (thunk) –

+2

в основном «ошибка» не является функцией. Из просмотра документов acios 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'. Попробуйте изменить это? Ошибка говорит, что 'error' не является функцией. Все в вашем коде выглядит хорошо для меня. –

 Смежные вопросы

  • Нет связанных вопросов^_^