2016-06-12 68 views
6

我想知道如果可以的話,是否可以幫助解決這個問題。我正試圖從Redux狀態中刪除一個項目。我已將用戶通過action.data點擊的物品ID輸入到減速器中。從Redux狀態中刪除項目

我想知道如何將action.data與其中一個ID在Redux狀態中匹配,然後從陣列中刪除該對象?我也想知道在單個對象被刪除後設置新狀態的最佳方法嗎?

請參閱下面的代碼:

export const commentList = (state, action) => { 
    switch (action.type) { 
    case 'ADD_COMMENT': 
     let newComment = { comment: action.data, id: +new Date }; 
     return state.concat([newComment]); 
    case 'DELETE_COMMENT': 
     let commentId = action.data; 

    default: 
     return state || []; 
    } 
} 

回答

41

只是過濾評論:

case 'DELETE_COMMENT': 
    const commentId = action.data; 
    return state.filter(comment => comment.id !== commentId); 

這樣你就不會發生變異原state陣列,但沒有元素返回一個新的數組,其編號爲commentId

更簡潔:

case 'DELETE_COMMENT': 
    return state.filter(({ id }) => id !== action.data); 
+0

我看到它使用的只是ID另一個例子,而不是你的答案({ID})。這裏有什麼不同? –

+0

@MattSaunders'({id})=> ...'是一個lambda表達式(用js術語表示的箭頭函數),它破壞了它的參數。這意味着輸入應該是一個對象,我們只關心它的'id'屬性。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –