在開發的過程中突然發現了乙個非常詭異的問題,偽**如下:
this.props.dispatch(updatedata(value)) // 1
console.log(this.props.data)//2 狀態沒有更新
settimeout(() => //3 狀態發生了更新)
於是猜想redux執行action應該是同步的,但是reducer中將新狀態返回更新store資料倉儲的過程應該是非同步的.所以當上面1處修改store中的資料,2中獲取時卻不是更新的資料,因為此時store倉庫的資料還未更新.
通過搜尋相關網頁得到一些啟示:元件通過react-redux封裝後相當於包了一層高階元件。而這乙個高階元件在redux裡的state更新時會呼叫setstate,所以它的store的資料倉儲更新才會是非同步的過程.
解決方法:
action中:
export const updatedata = (value) => dispatch => );
return promise.resolve();//通過返回promise解決狀態非同步更新的問題
};
元件中使用:
this.props.actions.updatedata(value).then(()=>)
Redux的State不應該全部放在Store裡
使用了redux管理應用的狀態,應用的狀態不應該全部放在store裡面。前端狀態主要有一下兩種 1.domain data 2.ui state 1.domain data 來自於服務端對領域模型的抽象,比如user,product,這個應該放在store,方便更新data 2.ui state 大...
state更新不生效之 派生狀態
乙個派生 state 值 num 也被 setstate 方法更新時,這個值就不是乙個單一 的值了。getderivedstatefromprops 和 componentwillreceiveprops 只會在 props 改變 時才會呼叫。實際上只要父級重新渲染時,這兩個生命週期函式就會重新呼叫...
Flex中State和ViewStack的區別
最近在乙個flex遺留系統上工作,flex部分承擔的主要是使用者註冊的業務。使用者註冊需要多個步驟,比如填寫完基本資訊,通過驗證之後,來到聯絡資訊填寫表單,等等。步驟之間的切換通過改變當前頁面的state來實現 state控制不同控制項的顯示 掩藏等。直覺不應該這麼實現,今天看了 flex 3權威指...