[英]React setState not changing the state
我有一个 App 组件,它的状态包含一个属性 "faces" ,它在一个对象之后初始化
const initFaces = {
left : [[0,0,0],[0,0,0],[0,0,0]],
front : [[1,1,1],[1,1,1],[1,1,1]],
right : [[2,2,2],[2,2,2],[2,2,2]],
back : [[3,3,3],[3,3,3],[3,3,3]],
up : [[4,4,4],[4,4,4],[4,4,4]],
down : [[5,5,5],[5,5,5],[5,5,5]]
};
class App extends React.component{
...
this.state = {
faces : initFaces
}
...
}
现在我的应用程序不断改变“faces”属性的状态,所以我尝试实现一个按钮将其恢复到原始状态。 这就是我所拥有的:
this.setState({
faces : initFaces
})
但这不起作用,而这样做:
this.setState({
faces : {
left : [[0,0,0],[0,0,0],[0,0,0]],
front : [[1,1,1],[1,1,1],[1,1,1]],
right : [[2,2,2],[2,2,2],[2,2,2]],
back : [[3,3,3],[3,3,3],[3,3,3]],
up : [[4,4,4],[4,4,4],[4,4,4]],
down : [[5,5,5],[5,5,5],[5,5,5]]
}
})
为什么它不能简单地通过引用与我刚刚复制的内容相同的对象来工作?
发生此问题是因为您在初始化状态时传递了对initFaces
的引用,因此每当faces
发生变化时(假设您以某种方式直接改变this.state.faces
, 这是不建议的),您实际上是在更改initFaces
引用的同一对象。
您可以通过在设置状态时执行initFaces
的浅拷贝来解决您的问题(为此,您可以使用传播语法):
class App extends React.component{
...
this.state = {
faces : { ...initFaces }
}
...
}
并且还在您的按钮实现中恢复更改:
this.setState({
faces : { ...initFaces }
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.