Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
Reactjs: Is it necessary to copy object in component state before modifying it?
假设我的reactjs组件有两种状态:
a: {
a: 1
},
b: [1, 2, 3]
现在我希望他们成为:
a: {
a: 1,
b: true
},
b: [1, 2, 3, 4]
这样做正确吗:
this.state.a.b = true;
b = this.state.b.push(4);
this.setState({
a: this.state.a,
b: b
});
如果没有,合适的方法是什么。
最好的方法。
this.setState({
a: Object.assign({}, this.state.a, { b: true }),
b: [...this.state.b, 4]
});
状态属性应该被替换,而不是突变:
this.setState({
a: { // create new a object
a: this.state.a.a,
b: true
},
b: this.state.b.concat([4]) // create new b array
});
直接从文档:
不直接修改状态
例如,这不会重新渲染组件:
// Wrong
this.state.comment = 'Hello';
相反,请使用setState():
// Correct
this.setState({comment: 'Hello'});
因此,如果您使用setState,则在修改对象之前无需复制它
因此您的代码可能如下所示:
this.setState({
a: (this.state.a.b = true),
b: this.state.b.push(4)
})
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 将ember对象的数组从ember组件传递到模板
- 查找数组's按属性不存在于另一个数组中的对象
- 块相对于父对象的位置
- 带有内置图像对象的Canvas组件构造函数;t显示's图像
- 使用Lodash从JSON对象获取特定于环境的配置
- 我不知道如何正确地将REST响应对象传递给ReactJS子组件
- 在对象上迭代以验证它是否's键存在于数组中
- 聚合物+流星,在火焰#每个循环中,无法将对象传递到聚合物网组件
- 如何创建独立于数组更新的组件列表
- 页面对象设计:有没有相当于Ruby gem的Javascript;site_prism”;
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 有可能对对象中的所有键进行原子更新吗?类似于阵列拼接的东西
- 为什么属性存在于对象实例上,即使其原型发生了更改
- undercore返回数组中对象的indes,其中单词存在于对象中的句子中
- HTML按钮的作用类似于从键盘按下的键,并在某些对象或整个网站上起作用
- 在Angular2中添加一个依赖于组件名的外部Javascript文件
- 是否可以在ExtJS中从远程json对象创建组件?
- 使用Ember组件中的Morris.js图,使用自定义对象从组件到控制器的气泡动作事件
- 有必要捕获加载对象,组件组件