2016-06-12 13 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配列を変化させますが、要素なしで新しい配列を返すことはありません。この方法は、 idはcommentIdです。

は、より簡潔であるために:

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

私はあなたの答え({ID})とは対照的に、単にIDを使用する別の例を見ました。ここでは何が違うの? –

+0

@MattSaunders '({id})=> ...'はラムダ式(js項の矢印関数)で、引数を破壊します。入力がオブジェクトでなければならないことを意味し、私たちはそれが 'id'プロパティだけに興味があります。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –

関連する問題