答案 0 :(得分:2)
在javascript对象中是可变的。
例如,如果
var a = {"something": 1}
如果您将其分配给另一个变量b
并且如果更改其值,则对象a
的值也会更改
var b = a;
b.something = 2;
console.log(b);
console.log(a);
//output {"something": 2}
两者都会打印{“某事”:2}。 a中的值也会改变。
同样在您的代码中,您直接在行号61
中分配状态值,并在行号62
中对其进行变更。
更好的方法是使用
let newOptions = {...this.state.newOptions };
或
let newOptions = Object.assign({},this.state.newOptions}
这将创建新对象。
答案 1 :(得分:2)
React状态是可变的,因此您可以直接更新反应状态。但是由于多种原因,建议不要改变反应状态。其中一个原因是,如果您执行this.state.count = 3
,则反应DOM将以不可预测的方式运行,例如覆盖数据而不是重新呈现。性能调优是另一个原因。
对调用setState()
的反应将在不久的将来调用render
方法,这将导致使用新值更新DOM。
答案 2 :(得分:2)
国家确实在做出反应。你应该非常小心,不要像那样覆盖它,否则你会遇到意想不到的结果。最好将状态复制到另一个对象,然后根据需要更改其属性,并在完成后使用set state设置将对象状态设置为复制对象。 您可以使用Object.Assign或spread运算符。使用数组时,扩展运算符更容易。
this.state = {
myObj : {propA: "A" , propB: "B"};
}
然后在某些时候你想改变它
let myObj = this.state.myObj;
let copyMyObj = {...myObj};
copyMyObj.propA = "C";
this.setState({
myObj: copyMyObj
});