Redux: Reduced - 如何在嵌套数组的递归过程中避免对象不可扩展错误?

Posted

技术标签:

【中文标题】Redux: Reduced - 如何在嵌套数组的递归过程中避免对象不可扩展错误?【英文标题】:Redux: Reduced - How to avoid object is not extensible error during the recursion on nested array? 【发布时间】:2022-01-14 12:06:07 【问题描述】:

我有以下带有嵌套对象的对象数组:

[
      
        "name": "ONE",
        "properties": [
          
             "name": "XXX"
          ,
          
             "name": "YY"
          
        ]
      ,
      
        "name": "TWO",
        "properties": []
      
    ]

我正在尝试使用Reducer Function 中的map 递归地将属性添加到每个对象。我在哪里得到以下异常:

TypeError:无法添加属性 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 模式相关的嵌套对象?

【问题讨论】:

什么是“projectData.myArr”? myArr 是否包含数组? 【参考方案1】:

使用嵌套的spread syntax 在所需突变的每个级别创建新对象:

projectData.myArr.map((item, itemIndex) => (
  ...item,
  isChecked: false,
  properties: item.properties.map((value, valueIndex) => (
    ...value,
    isChecked: false,
  ));
));

【讨论】:

以上是关于Redux: Reduced - 如何在嵌套数组的递归过程中避免对象不可扩展错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ReactJs Redux 中删除/设置状态数组的“null”嵌套属性?

在 React/Redux reducer 中,如何以不可变的方式更新嵌套数组中的字符串?

Redux中的嵌套数组在React中重置值

带有嵌套对象数组的 Redux 的 Normalizr

将项目添加到 redux-toolkit 中的嵌套数组

在redux中更新深层嵌套数组