我想将要与有效负载一起删除的条目的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算法所禁止的。
答案 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;