web-dev-qa-db-fra.com

Supprimer un élément de l'état Redux

Je me demande si vous pourriez m'aider avec ce problème si possible. J'essaie de supprimer un élément de l'état Redux. J'ai transmis l'identifiant de l'élément sur lequel l'utilisateur a cliqué via action.data dans le réducteur. 

Je me demande comment je peux associer le action.data à l'un des ID dans l'état Redux, puis supprimer cet objet du tableau? Je me demande également quel est le meilleur moyen de définir le nouvel état après la suppression de l'objet individuel.

Veuillez consulter le code ci-dessous:

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

Il suffit de filtrer les commentaires:

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

De cette façon, vous ne muterez pas le tableau state d'origine, mais vous renverrez un nouveau tableau sans l'élément, qui avait l'identifiant commentId.

Pour être plus concis:

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

Vous pouvez utiliser Object.assign(target, ...sources) et répartir tous les éléments ne correspondant pas à l'ID d'action. 

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