我正在开发一个React App,偶然发现了React状态的这种行为,我不确定它是否正确!?
我这样启动我的国家:
componentDidMount() {
someRequest()
.then(...) //do stuff to get the Payload of the Response
.then(response => {
this.setState({
obj1: response,
obj2: response.someArr
})
})
}
我有一个可以更改obj2状态的formHandler
formHandler = event => {
...
this.setState({obj2: newArrState})
}
我一直认为React状态是不可变的,因此obj2在setState()
调用之后拥有对新对象/数组的新引用。
但是,如果我看看this.state.obj1
,我也会看到更改传播到this.state.obj1.someArr
,因此this.state.obj1.someArr === this.state.obj2
这是正确的行为吗?
答案 0 :(得分:2)
React
不会对您的州强制实施不变性。实际上,您可以(但是您absolutely should not)直接对其进行修改。
由开发人员来决定是通过使用无法修改的数据结构(例如imuutable.js)或其他方式对数据实施不可变性。
答案 1 :(得分:1)
是的,这是正确的行为。应该将React状态保持不变,因为任何更改的值都将被下一个setState调用覆盖。
从React文档中:
请不要直接更改this.state,因为之后调用setState()可能会替换您所做的更改。将此this.state视为不可变。