使用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