記一次Redux中異步請求數據render不執行的問題

首先來一次問題的描述吧,我的感受這樣學習的方法不錯。ajax

關於Redux中state改變而render不渲染的問題。

實際問題場景以下:數組

數據:一個數組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

相關文章
相關標籤/搜索