我需要使用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
- 但这不是重点:)
答案 0 :(得分:4)
您可以使用动态属性将变量index
的值用作属性名称:
this.setState(React.addons.update(this.state, {
collection: {
[index]: { // <--
property: { $set: !this.state.collection[index].property }
}
}
}));
这是ES2015中的新功能。