2017-09-01 141 views
0

我想保持最大數組數爲10.當新對象添加到reducer狀態時,如果數組數超過10我想刪除第一個對象。我怎樣才能做到這一點 ?從reducer狀態的數組中刪除最後一個元素

這是我的代碼:

switch(action.type) { 
    case types.RECENTLY_VIEWED_ITEM: 
     return Object.assign({}, state, { 
     data: [ 
      ...(state.data.filter(item => (item.id !== action.payload.id))), 
      action.payload 
      ] 
     }); 

    case types.REMOVE_RECENTLY_VIEWED_ITEM: 
     return Object.assign({}, state, { 
     data: [ 
      ...(state.data.splice(0, 1)) 
     ]}); 

     default: 
     return state; 
} 

謝謝

回答

2

利用slice而不是splice

splice返回你刪除元件陣列而slice返回你的元件

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
    return Object.assign({}, state, { 
    data: [ 
     ...state.data.slice(1, 10) 
    ]}); 

    default: 
    return state; 

代替混合Object.assign的和Spread operator可以只使用傳播算子的刪除後的數組。

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
    return { ...state, 
     data: [ 
      ...state.data.slice(1, 10) 
     ] 
    }; 

    default: 
    return state; 

看到這個答案,以及

Using Object.assign in React/Redux is a Good Practice?

+0

state.data.slice(1)將不會保持最大的數組數10.它只是所有的數據複製,除了第一。所以如果數組的長度是15,它會返回最後14個數據的數組。 – Ved

+0

@Ved OP沒有檢查任何地方的計數,我想他只是在長度超過10時調用動作,這就是我可以推斷的 –

+0

我所看到的問題:「我想保持最大數組數爲10. if數組數超過10我想刪除第一個對象「。 – Ved

0

變化拼接帶片,你可以這樣做:

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
 
return Object.assign({}, state, { 
 
data: [ 
 
      ...(state.data.slice(state.data.length-10, (state.data.length)) 
 
    ]}); 
 
    default: 
 
    return state;

相關問題