我正在尝试清除组件,state
但找不到es6语法的参考。我正在使用:
this.replaceState(this.getInitialState());
但是,这不适用于es6类语法。
我将如何获得相同的结果?
据我所知,React组件不会保留初始状态的副本,因此您只需要自己做即可。
const initialState = {
/* etc */
};
class MyComponent extends Component {
constructor(props) {
super(props)
this.state = initialState;
}
reset() {
this.setState(initialState);
}
/* etc */
}
请注意,该行this.state = initialState;
要求您永远不要改变状态,否则您将污染initialState
并且无法进行重置。如果无法避免突变,则需要initialState
在构造函数中创建的副本。(或按照initialState
进行功能getInitialState()
。)
最后,建议您使用setState()
而不是replaceState()
。
这是我使用的方法。我确实想评论一下
replaceState
在这种情况下的情况,因为它可以确保状态对象的整体返回到一组已知的值。实际上,事实证明,
replaceState()
使用ES6类时甚至不可用。自发布此答案以来,我才意识到这一点。请注意,
setState
合并状态。如果component将状态字段添加到not中initialState
,则不会清除这些字段。如果要添加未在初始状态中定义的状态字段,那么您做错了。
这不能正常工作,因为如果您进行更改,
state
那么它也会更改,initialState
因为它是通过引用分配的。因此,当您致电reset时,它实际上不会重置为initialState
。没什么变化,您必须深复制initialState
到state