webentwicklung-frage-antwort-db.com.de

Löschen Sie ein Element aus dem Redux-Status

Ich frage mich, ob Sie mir bei diesem Problem helfen könnten, wenn möglich. Ich versuche, ein Element aus dem Redux-Status zu löschen. Ich habe die ID des Artikels eingegeben, den der Benutzer über action.data in den Reducer klickt. 

Ich frage mich, wie ich den action.data mit einer der IDs im Redux-Status abgleichen und dieses Objekt dann aus dem Array entfernen kann. Ich frage mich auch, wie man am besten den neuen Zustand setzt, nachdem das einzelne Objekt entfernt wurde.

Bitte sehen Sie den Code unten:

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 || [];
  }
}
13
Bradley

Filtern Sie einfach die Kommentare:

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

Auf diese Weise können Sie das ursprüngliche state-Array nicht mutieren, sondern ein neues Array ohne das Element zurückgeben, das die ID commentId hatte.

Um genauer zu sein:

case 'DELETE_COMMENT':
  return state.filter(({ id }) => id !== action.data);
56
Balázs Édes

Sie können Object.assign(target, ...sources) verwenden und alle Elemente verteilen, die nicht mit der Aktions-ID übereinstimmen 

case "REMOVE_ITEM": {
  return Object.assign({}, state, {
    items: [...state.items.filter(item => item.id !== action.id)],
  });
}
1
Zakher Masri