Javascript 删除减速器中的动态特性

Javascript 删除减速器中的动态特性,javascript,reactjs,redux,Javascript,Reactjs,Redux,我想动态地将我要删除的条目的id和有效负载一起传递到reducer中,我试图删除一个对象属性(具有“eowvw698x”id的属性,该属性是动态的,可能会更改),并保留现有属性 case DELETE_ENTRY: return { ...state, diaryEntries: { ...state.diaryEntries, ?????? }, }; 我怎样才能做到这一点 编辑 我使用了文科夫斯基的回答和克莱肯的评论建

我想动态地将我要删除的条目的id和有效负载一起传递到reducer中,我试图删除一个对象属性(具有“eowvw698x”id的属性,该属性是动态的,可能会更改),并保留现有属性

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

我怎样才能做到这一点

编辑 我使用了文科夫斯基的回答和克莱肯的评论建议,并写道:

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

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

您可以破坏
状态。日记条目
来删除该id

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

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

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

   return {
     ...state,
     diaryEntries: {
       ...state.diaryEntries,
       eowvw698x: undefined 
     },
   };
编辑 正如在评论中所说的,您正在寻找的是动态地破坏一个变量,您可以在中看到如何做到这一点

但对于您的示例,您可以做的是对变量进行析构函数并命名,然后将其删除

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

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

只需
删除
该属性,然后对其执行以下操作:

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

我的组件无法从该属性读取undefined,因为它仍然存在,这将导致TypeError。我想删除它。@Vencovsky在分解时,与动作类型一起进入减速器的id是动态设置的,因此我无法动态分解像
{[payload],…otherProperties}=state.diaryEntries
@MihaiCiobanu这样的道具。请相应地更新您的问题,这是一个重要的细节。@MihaiCiobanu可以通过别名来完成:
{[payload]:dontcare,…otherProperties}=state.diaryEntries
将其键为
有效负载值的属性存储到
dontcare
中,并将
其他属性中的其余属性存储到
中。下次请更清楚地说明您想要什么,不清楚
eowvw698x
是否是动态键,而不是硬编码的。这会改变当前禁止的状态(使用react或redux)。@Emilebergron了解,但不知道。我已经更新了答案。