edd*_*ddy 4 javascript immutability ecmascript-6 reactjs
我需要复制一个对象this.state以更改其某些属性值。
例如,在以下方法中,状态被直接突变(this.state.errors = {})
authorFormIsValid = () => {
var formIsValid = true;
this.state.errors = {}; //clear any previous errors.
if (this.state.author.firstName.length < 3) {
this.state.errors.firstName = 'First name must be at least 3 characters.';
formIsValid = false;
}
if (this.state.author.lastName.length < 3) {
this.state.errors.lastName = 'Last name must be at least 3 characters.';
formIsValid = false;
}
this.setState({errors: this.state.errors});
return formIsValid;
};
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,我知道我们可以使用:
a)对象传播算子
let errors={...this.state.errors};
Run Code Online (Sandbox Code Playgroud)
let errors=Object.assign({},this.state.errors);
Run Code Online (Sandbox Code Playgroud)
但是有时我似乎在一些示例中object destructuring使用了这样的示例:
authorFormIsValid = () => {
let formIsValid = true;
//Destructuring error and authors from this.state
let {errors, author} = this.state;
errors = {}; //clear any previous errors.
if (author.firstName.length < 3) {
errors.firstName = 'First name must be at least 3 characters.';
formIsValid = false;
}
if (author.lastName.length < 3) {
errors.lastName = 'Last name must be at least 3 characters.';
formIsValid = false;
}
this.setState({errors});
return formIsValid;
};
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,它是否object destructuring等同于上述其他两种方法?我的意思是,我会避免通过使用simple直接改变状态object destructuring吗?
Object destructuring起作用reference,因此您不应该在对其进行销毁后对其进行变异。所以的做法
let {errors, author} = this.state;
errors = {}; //clear any previous errors.
Run Code Online (Sandbox Code Playgroud)
实际上是错误的。
请参阅下面的参考电话摘录
let {errors, author} = this.state;
errors = {}; //clear any previous errors.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3096 次 |
| 最近记录: |