2016-01-20 21 views
3

我有一個更新Redux中的某些搜索條件的操作。我想立即從基於本地標準的API獲取一些數據。問題是,雖然搜索條件動作分派是同步的,但在搜索結果分派開始之前它不會完成。如何在Redux中完成另一個同步操作時分派操作

在這個例子中,該標準將不會在API調用之前更新:

this.props.dispatch(updateLocalCriteria(someData)); 
this.props.dispatch(fetchApiResults(this.props.criteria)) 

我失去了一些東西明顯?我可以想到一些簡單的方法來處理這個問題,但最好的方法是什麼?我應該在搜索條件更新時設置一個標誌,並且如果標誌爲真,則在componentDidUpdate()中獲取結果?或者我應該使updateLocalCriteria()異步,以便我可以在承諾鏈中鏈接fetchApiResults()

編輯

我想我已經找到了我的答案。我可以在fetchApiResults()之內獲得當前狀態。因此,我可以在進行api調用之前獲取當前的搜索條件。

function fetchApiResults() { 
    return (dispatch, getState) => { 
     const state = getState(); 
     // fetch data and dispatch... 

回答

1

在你updateLocalCriteria,你可能已經改變你減速的道具之一,以新的價值,我會打電話給它criteria

你可以做的反而是創建另一個行動讓我們說updateCriteriaAndFetch將被調用就像你一樣:

this.props.dispatch(updateCriteriaAndFetch(newCriteria)) 

,你將基本定義,像這樣

export const updateCriteriaAndFetch = criteria => dispatch => { 
    dispatch(updateLocalCriteria(criteria)) 
    dispatch(fetchApiResults(criteria)) 
} 

第二調度會甚至等待第一次同步更新完成,即使您不需要它,因爲您已經可以訪問它。

你仍然可以做你剛剛說的,得到你的商店的當前狀態,但是對我來說這看起來相當矯枉過正,因爲你可以簡單地將它作爲參數或你的行爲傳遞。

+0

'updateLocalCriteria()'只更新條件的一個屬性,但我想將所有條件發送到'fetchApiResults()'。我想在調用'fetchApiResults()'之前,我仍然需要在'updateCriteriaAndFetch()'中獲取當前狀態。 –

+0

在這種情況下是的 –