使用redux-api-middleware
我遇到了一个问题,其中只有一个减速器功能没有触发。Redux减速器不被称为
我想以类似的方式处理失败的api请求,如何处理成功的api请求。然而,据我所知,FSA永远不会被处理,尽管它的处理(AFAICT)与SEARCH_SUCCESS
FSA相同。它似乎是根据我在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
处理程序不会被调用 - 至少我没有看到日志输出I会期待,而且国家肯定不会看起来很正确。但是,我确实在redux devtools面板中看到了SEARCH_FAILURE
条目。
服务,以进一步迷惑我,这里是我的声明有目前用于创建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'
}
}
}
的功能是被称为和记录或多或少我的期望。那么我在这里搞什么?据我所知,redux-api-middleware
的文档多次阅读,这种设置应该产生我想要的行为,但事实并非如此。成功取得成功,但失败失败...
尝试在reducer文件(在定义reducer后的全局范围内)以及错误有效内容函数内打印SEARCH_FAILURE的值。总有机会他们是不同的价值观! – Brandon