javascript - 如何使用 setState 更新对象数组中的对象

标签 javascript reactjs ecmascript-6

我正在使用 React,我的状态被定义为对象数组。 我只需要能够更改 state.data 数组中的一个特定元素,即 id 为 1 的示例对象。

我想知道:

  • 在这种情况下使用 setState() 的正确方法是什么。

constructor(props) {
  super(props);
  this.state = {
    data: [{
        id: 0,
        title: 'Buy a',
        status: 0, // 0 = todo, 1 = done
      },
      {
        id: 1,
        title: 'Buy b',
        status: 0,
      },
      {
        id: 2,
        title: 'Buy c',
        status: 0,
      }
    ]
  };
  this.onTitleChange = this.onTitleChange.bind(this);
}
onTitleChange(id, title) {
  console.log(id, title);
  debugger
}

最佳答案

您可以使用展开运算符克隆状态对象,然后使用 findIndex 方法在数组中查找具有给定 id 的对象索引,修改对象并设置状态。

constructor(props) {
  super(props);
  this.state = {
    data: [{
        id: 0,
        title: 'Buy a',
        status: 0, // 0 = todo, 1 = done
      },
      {
        id: 1,
        title: 'Buy b',
        status: 0,
      },
      {
        id: 2,
        title: 'Buy c',
        status: 0,
      }
    ]
  };
  this.onTitleChange = this.onTitleChange.bind(this);
}
onTitleChange(id, title) {
   var data = [...this.state.data];
   var index = data.findIndex(obj => obj.id === id);
   data[index].title = title;
   this.setState({data});
}

关于javascript - 如何使用 setState 更新对象数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45878147/

相关文章:

c# - Web 服务需要 JSON,发送多部分格式的数据

javascript - Redux 表单 : Input stays with 'touched: false'

reactjs - 在 Ionic Capacitor React 中隐藏启动画面

javascript - 使用 Wea​​kMaps 在 Javascript 中创建常规弱引用

javascript - 使用 Mocha 和 Chai 进行 REST API 测试 - 未处理的 promise 拒绝

javascript - 如何提取/哪里具有数组属性的 javascript 列表

javascript - D3.js 和弦图 - 使和弦接触拉开的弧线

javascript - 右键单击在 Firefox 中不断传播

javascript - 在 React Native 中将 Prop 传递给状态?

javascript - 正确的 ES6 导入以添加力矩精确范围插件