如何更新React中的数组元素?

时间:2015-12-10 20:50:01

标签: reactjs

我需要使用React's immutability helpers更新数组中元素的一个属性。

我有这样的事情:

this.setState(React.addons.update(this.state.collection[index], {
  property: { $set: !this.state.collection[index].property }
}));

index实际上是集合中元素的索引,而property是我试图切换的布尔值。

问题是代码没有修改元素的property,而是修改了property对象中的this.state属性 - 所以它就像{collection: [...], property: true}一样。

Nested Collections上它说我应该使用带元素索引的哈希作为键,但是我把它放在一个变量中,所以它有点含糊不清:

this.setState(React.addons.update(this.state, {
  collection: {
    index: {
      property: { $set: !this.state.collection[index].property }
    }
  }
}));

它实际上给了我一个Cannot read property 'property' of undefined错误 - 即,this.state.collection没有index属性,这是真的。

我如何实现这一目标?

我已经知道我应该使用$apply代替$update - 但这不是重点:)

1 个答案:

答案 0 :(得分:4)

您可以使用动态属性将变量index的值用作属性名称:

this.setState(React.addons.update(this.state, {
  collection: {
    [index]: { // <--
      property: { $set: !this.state.collection[index].property }
    }
  }
}));

这是ES2015中的新功能。