所以我有一个React组件:
getInitialState: function () {
return {
peopleDetails: []
}
}
peopleDetails
将包含具有名称,电子邮件,电话等属性名称的对象。
问题在于:我将把方法传递给子组件,这些子组件应该改变这个数组的对象。有些方法只会编辑一个人的电子邮件,另一种方法会编辑手机等。因此,他们需要拨打setState
。
据我了解,setState
应返回该对象的新副本。我发现这是不可能做到的,因为即使我必须改变对象,事情也很困难(我必须指定一些过滤器来在数组中找到它,然后改变它的值等)。
我很确定很多React应用程序都使用这些数据结构......在这种状态下你有一个包含对象的数组,你需要对这些对象做些事情。是否有一些简单的方法来实现这一点,尊重"规则"每个setState
调用应该返回一个全新的状态对象吗?
答案 0 :(得分:1)
如果您真的不想使用不可变数据,那么您可以直接改变您喜欢的属性,并在发生突变后调用this.forceUpdate()
而不是setState
。
如果要继续使用不可变数据,那么添加到该数组将返回包含新对象的新数组。如果你删除了那个人,那么你就会返回一个新的空数组。如果您要在数组中就地修改项目,那么您使用concat / slice构建一个新数组以获取尚未更改的所有元素,然后添加更改的元素,然后添加所有内容已更改元素的索引。
有关避免数组突变的更深入讨论,请查看this talk。