2016-01-06 6 views
4

Использование redux-api-middleware Я столкнулся с проблемой, когда одна и только одна из моих функций редуктора не запускается.Редуктор Redux не называется

Я хотел бы обрабатывать неудавшиеся запросы api аналогично тому, как я обрабатываю успешные запросы api. Тем не менее, насколько я могу судить, FSA SEARCH_FAILURE никогда не обрабатывается, хотя он обрабатывается (AFAICT) идентично FSA SEARCH_SUCCESS. Кажется, он создается и отправляется на основе того, что я вижу в devtools.

У меня есть этот

import { CALL_API } from 'redux-api-middleware' 
import { handleActions } from 'redux-actions' 
const searchReducer = handleActions({ 

//... other handlers elided 

SEARCH_SUCCESS: (state = defaultState, action) => { 
    return { 
    ...state, 
    search_results: ({...action.payload}), 
    api: { 
     requestPending: false, 
     searchPending: false 
    }, 
    } 
}, 

SEARCH_FAILURE: function(state = defaultState, action) { 
    console.log("Handling SEARCH_FAILURE given state, action: ", state, action) 

    return { 
      ...state, 
      search_results: {Total: 0}, 
      api: { 
       requestPending: false, 
       error: action.payload 
       }, 
      errors: [action.payload, ...state.errors] 
     } 
}, 
}) 

SEARCH_SUCCESS FSA получает обрабатывается searchReducer, но когда сервер дает 400 ответ, SEARCH_FAILURE обработчик никогда не вызывается - по крайней мере, я не вижу выхода я вхожу ожидал бы, и государство, конечно же, не выглядит правильно. Однако я вижу запись SEARCH_FAILURE на панели redux devtools.

сервировки запутать меня дальше, вот декларация у меня есть на данный момент для создания RSAA

export function doSearch(selected_filters, page){ 
let qs = SearchPage.constructQueryString(selected_filters, page) 

return { 
    [CALL_API]: { 
    endpoint: `/api/songs/search?${qs}`, 
    method: 'GET', 
    types: [ 
     {type: SEARCH_REQUEST}, 
     {type: SEARCH_SUCCESS}, 
     { 
      type: SEARCH_FAILURE, 
      payload: (action, state, res) => { 
       if (400 === res.status) 
        { 
        console.log(`${SEARCH_FAILURE} payload: `, action, state, res) 
        } 
       return res 
       } 
      }, 
     ], 
     headers: { 'Content-Type': 'application/json' }, 
     credentials: 'include' 
    } 
    } 
} 

в payload функцию является который вызывается и лесозаготовки более или менее то, что я ожидал. Итак, что я здесь испортил? Насколько я могу различить многократные чтения документов для redux-api-middleware, эта настройка должна давать поведение, которое я хочу, но это не так. Успехи преуспевают, но неудачи терпят неудачу ...

+0

попробуйте напечатать значение 'SEARCH_FAILURE' в файле редуктора (в глобальном масштабе сразу после определения редукторов), а также внутри вашей функции полезной нагрузки. Всегда есть шанс, что они разные ценности! – Brandon

ответ

0

Я столкнулся с подобной проблемой, когда я определял один из своих типов с объектом, а не только с действием, которое вы делаете для SEARCH_FAILURE. Я в конечном итоге фиксируя обновив свою package.json с:

"redux-api-middleware": "^1.0.0-beta3", 

Я думаю, что проблема в том, что документы описывают версии 1.0.0 API, но когда вы:

npm install redux-api-middleware --save 

Вы в конечном итоге получить более раннюю версию пакета.

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