我有下面的对象数组与嵌套对象:
[
{
"name": "ONE",
"properties": [
{
"name": "XXX"
},
{
"name": "YY"
}
]
},
{
"name": "TWO",
"properties": []
}
]
我尝试在Reducer函数中使用map递归地将属性添加到每个对象。在这里我得到了以下异常:
类型错误:无法添加属性isChecked,对象不可扩展
projectData.myArr.map((item, index) => {
item.isChecked = false;
item.properties.map((value, index1) => {
value.isChecked = false;
})
});
我尝试使用Object.assign(),正如这里所讨论的:Object is not extensible error when creating new attribute for array of objects
let newData = data.map((item) =>
Object.assign({}, item, {selected:false})
)
但这种方式允许我只为顶级对象添加属性,而不为内部对象添加属性。
如何解决与Redux模式相关的嵌套对象?
2条答案
按热度按时间epggiuax1#
使用嵌套展开语法在所需变化的每个级别创建新对象:
n7taea2i2#
也可以尝试使用Native StructuredClone或lodash cloneDeep(用于V17.2.0之前的节点版本)
这将创建一个新的克隆,因此redux中的任何属性都不会被修改,允许人们自由地使用代码。