首页 > 解决方案 > 删除 reducer 中的动态属性

问题描述

我想动态地将我想与有效负载一起删除的条目的 ID 传递到减速器中,并且我正在尝试删除一个对象属性(具有“eowvw698x”ID 的那个是动态的并且可能会更改)并保留现有的.

case DELETE_ENTRY:
   return {
     ...state,
     diaryEntries: {
       ...state.diaryEntries,
       ??????
     },
   };

在此处输入图像描述

我怎样才能做到这一点?

编辑

我使用了 Vencovsky 的回答和 Klaycon 的评论建议并写道:

case DELETE_ENTRY:
  const { [payload]: dontcare, ...otherProperties } = state.diaryEntries;
  return {
    ...state,
    diaryEntries: {
      ...otherProperties,
    },
  };

其他人的解决方案改变了状态对象,这是最高算法所禁止的。

标签: javascriptreactjsredux

解决方案


您可以破坏state.diaryEntries以删除该ID

   const { eowvw698x, ...otherProperties } = state.diaryEntries

   return {
     ...state,
     diaryEntries: {
       ...otherProperties 
     },
   };

或者

这不是最好的方法,但您可以将其设置为undefined.

   return {
     ...state,
     diaryEntries: {
       ...state.diaryEntries,
       eowvw698x: undefined 
     },
   };

编辑

正如评论中所说,您正在寻找的是动态破坏一个变量,您可以在这个问题中看到如何做到这一点。

但是对于您的示例,您可以做的是破坏并命名变量,只是将其删除。

   const { [keyToRemove]: anyVariableNameYouWontUse, ...otherProperties } = state.diaryEntries

   return {
     ...state,
     diaryEntries: {
       ...otherProperties 
     },
   };

推荐阅读