鍍金池/ 問(wèn)答/Linux  HTML/ redux中同步的action是異步更新state的??。?/span>

redux中同步的action是異步更新state的?!?

我遇到了如下的問(wèn)題

this.props.dispatch(updateState(key, value))
// 狀態(tài)沒(méi)有更新
setTimeout(() => // 狀態(tài)發(fā)生了更新)

我在stackoverflow看到了同樣的問(wèn)題,鏈接如下

https://stackoverflow.com/que...

發(fā)現(xiàn)同步的action,dispatch后,state確實(shí)是異步更新的

我雖然找到了,解決的辦法,通過(guò)componentWillReceiveProps, 監(jiān)聽props上屬性的變化

 componentWillReceiveProps(nextProps){
     if(nextProps.value!==this.props.value){alert(nextProps.value)}
 }

但是我還是有一個(gè)疑問(wèn),redux文檔上有這樣一段代碼,
圖片描述

如果同步的action的dispath是異步更新的,那么這段代碼豈不是有隱患????如果前一個(gè)dispath還沒(méi)有更新狀態(tài)。。。。。

回答
編輯回答
氕氘氚

和你理解的相反,從發(fā)送action到redux內(nèi)的state更新這一過(guò)程是同步的,具體可參考同步數(shù)據(jù)流

那么為什么在具體體現(xiàn)上是異步的呢,其實(shí)是由于React的setState是異步。你可以通過(guò)React的Devtools觀察到,通過(guò)react-redux連接器封裝后的組件,其實(shí)就是在組件外層包了一層高階組件。而這一個(gè)高階組件在redux里的state更新時(shí)會(huì)調(diào)用setState。所以,整個(gè)過(guò)程就會(huì)呈現(xiàn)異步的形式。

那么自然的,下面那個(gè)隱患也就不存在了。

2017年1月24日 23:05