reactjs中对象状态数组内的不可变对象更改数组

时间:2021-02-04 22:22:13

标签: javascript arrays reactjs redux immutability

我在对象(wid)数组内有一个对象(卡片)数组,它在对象(数据)中,如下所示:

{
  data: {
    ban: {
      first: "one"
    },
    foo: {
      second: "two"
    },
    wid: [
      {
        code: "three",
        name: "four",
        position: 1,
        cards: [
          {
            title: "five",
            id: "six"
          }
        ]
      },
      {
        code: "seven",
        name: "eight",
        position: 2,
        cards: [
          {
            title: "nine",
            id: "ten"
          }
        ]
      },
      //...
      {
        code: "alpha",
        name: "beta",
        position: 12,
        cards: [
          {
            title: "gamma",
            id: "theta"
          }
        ]
      }
    ]
  }
}

现在我从 API 获得另一个值,如下所示

const newWid = {
  code: "new",
  name: "newname",
  position: 2,
  cards: [
    {
      title: "newtile",
      id: "newid"
    }
  ]
}

我如何更改 data :仅在数组 wid 中的对象内的 cards 被替换在新 wid 中提供的位置而不是 {{1} 内的整个对象}) 不可变,提供位置。 (wid2 中提供)

附言。我没有使用 setState。

1 个答案:

答案 0 :(得分:0)

const position = newWid.display //获取位置

//step1 : 获取wid里面的对象并更新它的卡片 const specificWid = { ...data.wid[position], cards : data.cards }

//step2 : 更新宽度 const newestWid = [...data.wid] newwid.splice( position , 1 , specificWidget)

//步骤3: {...data, data : {...data, wid : [...newwid] } }