首先來一次問題的描述吧,我的感受這樣學習的方法不錯。ajax
實際問題場景以下:數組
數據:一個數組dateList,一個對象activeObj。
["2013","2014"],{}
在手風琴組件內,咱們根據數組遍歷生成對應List,併爲其添加onChange監聽。異步
理想效果爲,根據點擊的List發送ajax請求,在請求完成以前顯示loading,並在ajax請求完成後顯示相應數據。
實際效果爲,不管你點擊哪個,都顯示loading。學習
錯誤代碼爲:this
// ajax請求後處理res .then(res=>{ let result; if(!this.props.activeObj){ // 處理默認狀況 result={ [date]:res.data.shiftList }; }else{ // 問題關鍵部分 result = this.props.activeObj; result[date] = res.data.shiftList; } this.props.setActiveObj({ payload: result });
而錯誤主要緣由是沒有好好理解Redux中state究竟是個什麼東西。
咱們在經過this.props.setActiveObj(一個封裝的dispatch)修改了activeObj對象。
而Redux中state樹的改變是受咱們操做影響的。result = this.props.activeObj
僅僅只是賦值了引用,而咱們的修改 result[date] = res.data.shiftList
也是在原來的activeObj對象上修改。因此致使結果是Redux沒有發現state樹的變化,因此並無觸發render刷新咱們的視圖。spa
基本概念要熟,爬坑才足夠迅捷,抓蟲不要想的太複雜,錯的每每都很簡單。
PS:本身封裝些異步請求組件吧。code