Использование 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
, эта настройка должна давать поведение, которое я хочу, но это не так. Успехи преуспевают, но неудачи терпят неудачу ...
попробуйте напечатать значение 'SEARCH_FAILURE' в файле редуктора (в глобальном масштабе сразу после определения редукторов), а также внутри вашей функции полезной нагрузки. Всегда есть шанс, что они разные ценности! – Brandon