React中对象数组的SetState

时间:2018-03-25 15:32:24

标签: reactjs immutability setstate

好的,所以我很沮丧地找到合适的解决方案,所以我在这里发布问题。给出答案对我有很大的帮助,因为我被卡住了!

状态树看起来像这样

this.state = {
      itemList : [{
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }, {
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }],
     }

问题是:

  1. 无法更新数组的Object中的任何特定键 到_id
  2. 以前的状态应该保持不变

4 个答案:

答案 0 :(得分:10)

this.setState(prevState => ({
    itemList: prevState.itemList.map(
    obj => (obj._id === 1234 ? Object.assign(obj, { description: "New Description" }) : obj)
  )
}));

这是使用setState和prevstate更新数据结构中对象的某个属性的方法。

答案 1 :(得分:0)

要更新像这样构造的状态,你必须找到要更新的元素的索引,复制数组并更改找到的索引。

如果将记录列表保留为对象,将id作为键并记录为值,则更容易,更易读。

答案 2 :(得分:-2)

执行此操作的唯一方法是复制itemList,修改它,并将状态设置为它。

update() {
   let itemList = this.state.itemList.slice();
   //update it
   this.setState({ itemList });
}

答案 3 :(得分:-2)

将数据更新为对象数组的最佳方法

onChange={ (e) => this.setState({formData: { ...this.state.formData, 'plan_id': e.target.value}})}