Javascript Reactjs:在修改对象之前,是否需要复制处于组件状态的对象?
假设my reactjs组件有两种状态:Javascript Reactjs:在修改对象之前,是否需要复制处于组件状态的对象?,javascript,reactjs,Javascript,Reactjs,假设my 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 }); 如果没有,正确的方法是什么。状态属性应该被替换,而不是变异:
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: { // create new a object
a: this.state.a.a,
b: true
},
b: this.state.b.concat([4]) // create new b array
});
this.setState({
a: Object.assign({}, this.state.a, { b: true }),
b: [...this.state.b, 4]
});
最好的方法
this.setState({
a: Object.assign({}, this.state.a, { b: true }),
b: [...this.state.b, 4]
});
直截了当地说:
不要直接修改状态
例如,这不会重新渲染组件:
// Wrong
this.state.comment = 'Hello';
相反,请使用setState():
因此,如果使用setState,则无需在修改对象之前复制它 因此您的代码可能如下所示:
this.setState({
a: (this.state.a.b = true),
b: this.state.b.push(4)
})