2016-01-06 88 views
4

使用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的文檔多次閱讀,這種設置應該產生我想要的行爲,但事實並非如此。成功取得成功,但失敗失敗...

+0

嘗試在reducer文件(在定義reducer後的全局範圍內)以及錯誤有效內容函數內打印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 

你最終得到該軟件包的早期版本。