2017-01-02 80 views
0

在React中,當我調用setState時,它有一個回調來通知我已設置狀態。但是,當我使用Redux時,我使用dispatch來更改狀態,但是如何知道狀態是否已更新。無法知道何時更新狀態時使用調度

例如:

dispatch({type: 'setCount', {count: 1}}); 

dispatch({type: 'add', {addedCount: this.state.count + 1}}) 

第二行依賴於第一線,但我們都知道的setState不是同步操作,我怎麼能在終極版處理這個問題?

+1

React組件仍然可以保持本地狀態,這看起來就像是你想要在這種情況下做的事情。如果您的點擊次數增加,您可以使用本地狀態來保持這一點。不需要像這樣簡單的操作複雜化。 –

+0

你不行。這不是Redux問題。 Redux是同步的,除非您使用存儲增強器等。但這非常有趣。即使我使用存儲增強器來刪除商店更新,我從來也不需要這些。你能否給我們詳細介紹一下你爲什麼需要它。 –

回答

1

通過使用redux-thunk模塊,您可以從調度的操作中返回Promise。在這些行動上派遣(......)將神奇地返回承諾,以便你可以......然後(......)對他們發出。另一方面,如果你的動作是同步的,一個setTimeout(...,0)就可以做到這一點。

雖然在你的例子中,我認爲第二次調度應該是一個簡單的setState,只要沒有任何外部依賴它,在這種情況下,它不應該是本地狀態,而是一個組合動作,同一時間。 redux-thunk也有幫助。

+0

我可以從我的動作函數中返回一個承諾,但我怎麼知道狀態已經更新,以便我可以解決承諾?在React中,setState有一個回調來告訴用戶狀態已經改變。 setTimeout確實有效,但我認爲這不是官方的方式。 – jasonjifly

+0

重點是將其減少到同步操作,您可以設置Timeout 0爲「等待」。你通過在Promises中包裝異步的東西來做到這一點。 setTimeout 0不是黑客。這是一種告訴解釋器稍後在執行堆棧中執行一些操作的方式,而不是其他任何操作。 –

+0

是的,同意,但我仍然認爲這不是一個好方法。無論如何,謝謝你的回答 – jasonjifly

0

如果您正在使用mapStateToProps將一個變量從redux存儲區傳遞給您的組件,您可以在組件的render方法內執行console.log(this.props.variableName)。只要該變量在商店中更新,render方法就會被調用。