反应嵌套状态更新

时间:2019-06-07 08:51:26

标签: reactjs

我想更新一个嵌套状态,该状态包含React应用程序中的一个数组

我想更新此嵌套状态 data 属性 更新以更新标签

let key = 0;
this.setState(prevState => ({

    datas: prevState.datas.datasets.map(
    el => el.key === key? { ...el, data: this.state.responseToPost.taux }: el
  )
}))

但是当我将其用于数据时:

datas: {
        labels: [],//this.state.dataLabel,
        datasets: [
          {
           //
           //some param
            data: []
          }
        ]
      } 

这是我想使用处理程序更新的嵌套状态

plane node

2 个答案:

答案 0 :(得分:0)

由于变量名称不一致,因此我不确定是否能得到您的示例。

但是我认为您正在寻找的是...运算符,它用另一个的“内容”“填充”一个数组或一个对象。

例如,我首先定义一个对象-然后定义一个新对象,其中包含相同的constant参数,但参数shouldBeChanged的值不同。

var obj = {
  constant0: 0,
  constant1: 1,
  shouldBeChanged: 'old value'
};

// Here I only change a single nested parameter
var newObj = {...obj,
  shouldBeChanged: 'new value'
};

console.log(newObj);

答案 1 :(得分:0)

如何使用此表达式更新状态数组对象

在我的研究中,我发现了此表达式的用例。 我之前没有使用过该表达式,因为@GalAbra的答案解决了我的问题。 所以我回来告诉我我对以下表达式的理解:

let key = 0; // providing id
this.setState(prevState => ({

    datas: prevState.datas.datasets.map(
    el => el.key === key? { ...el, data: this.state.responseToPost.taux }: el
  )
}))

何时可以使用此

当我要从对象的ID更新对象状态数组中包含的对象 时,我又回到了此消息。我以这种语法为例并编写了此代码。

dataStruc :[] // state  containing objects

updatObj // updated object 

this.setState(prevState=>({
  dataStruc:prevState.dataStruc.map(el=>( el.id!== updObj.id ? {...el} : updatObj))   
    }));