在减速器中删除动态属性

时间:2019-12-23 19:52:32

标签: javascript reactjs redux

我想将要与有效负载一起删除的条目的ID动态传递给reducer,并且尝试删除一个对象属性(具有“ eowvw698x” ID的对象,ID是动态的并且可能会更改)并保留现有的。

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

http://www.demo.com?code=74874

我该如何实现?

编辑

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

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

其他人的解决方案使状态对象发生了变异,这是Supreme算法所禁止的。

2 个答案:

答案 0 :(得分:5)

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

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

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

OR

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

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

编辑

如评论中所述,您正在寻找的是动态地破坏变量,您可以在this question中查看如何执行此操作。

但是对于您的示例,您可以做的是销毁并命名变量,仅将其删除。

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

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

答案 1 :(得分:0)

此后只需delete个属性即可完成操作:

case DELETE_ENTRY:
   let output = {
     ...state,
     diaryEntries: {
       ...state.diaryEntries
     },
   };
   delete output.diaryEntries[payload];
   return output;