2017-03-06 27 views
0

我只想問,爲什麼我的reducer不斷重寫我的嵌套數據,即使值是一個數組。基本上我在這裏建立的就像一個分頁。到目前爲止,這裏是我的代碼:在分頁縮減器中追加數據 - answersjs

const INITIAL_STATE = { 
    data: [], 
    page: 1 
}; 

export default (state = INITIAL_STATE, action) => { 
    switch(action.type) { 
     case GET_NEWS_SUCCESS: { 
      return { 
       data : { 
        [action.payload.category]: [ action.payload.data ] 
       }, 
       page: action.payload.page }; 
     } 
    } 

    return state; 
} 

下面的圖片是我減速的返回數據,基本上就echelon array下一個狀態0關鍵應該還是在那裏,將追加另一組數據。但正如您在第二個紅色矩形上所看到的,它將覆蓋先前的0鍵。

enter image description here

回答

2

你在這些線路覆蓋現有的陣列:

data : { 
    [action.payload.category]: [ action.payload.data ] 
}, 

你應該新對象追加到現有陣列。你可以使用擴展語法來實現它:

case GET_NEWS_SUCCESS: { 
      if (!state.data[action.payload.category]) { 
       state.data[action.payload.category] = []; 
      } 
      return { 
       data : { 
        [action.payload.category]: [ ...state.data[action.payload.category], action.payload.data ] 
       }, 
       page: action.payload.page }; 
     } 
+0

我已經試過這個,它給了我一個'不能將undefined或null轉換爲對象'的錯誤。也許是因爲這個'... state.data [action.payload.category]',因爲'action.payload.category'還沒有存在 –

+1

所以你必須檢查它是否在更新之前被定義,如果沒有被初始化空陣列。請參閱最新的答案。如果您已經知道所有可能的類別名稱,則可以使用空類別數組初始化狀態,而不是在每次更新時檢查它。 –

+0

我會試試這個,因爲它是從api中獲取的,所以該類別是未知的。 –