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