Javascript Reactjs setState上的一次性错误(?)
执行上述操作后,当我注销Javascript Reactjs setState上的一次性错误(?),javascript,reactjs,Javascript,Reactjs,执行上述操作后,当我注销newState和this.state时,在我再次点击此按钮并对状态进行新的更改之前,这些更改似乎尚未保持 console.log(newState); this.setState(newState); this.validateFieldsAndUpdateForm(type); console.log(this.state); 我想我需要一个回调,这样我只需执行第二个命令一次newState就会覆盖this.state newState = { contac
newState
和this.state
时,在我再次点击此按钮并对状态进行新的更改之前,这些更改似乎尚未保持
console.log(newState);
this.setState(newState);
this.validateFieldsAndUpdateForm(type);
console.log(this.state);
我想我需要一个回调,这样我只需执行第二个命令一次newState
就会覆盖this.state
newState = {
contact:
firstName: “joe”
lastName: “schmoe”
}
this.state = {
contact:
firstName: “joe”
lastName: “”
}
它将newState添加到state,因此this.state如下所示:
this.setState(newState, this.validateFieldsAndUpdateForm(type));
this.setState(newState, this.validateFieldsAndUpdateForm(type));
而且回调没有执行,这让我相信我注入了错误的回调。
如何使
newState
的联系人
立即覆盖原始联系人,而不是下次调用setState
?您遇到此问题的原因是this.setState
不能保证立即执行。从:
setState()不会立即改变this.state,但会创建
等待状态转换。调用此命令后访问this.state
方法可能返回现有值
您可以将函数作为回调传入,以便在状态更改发生后立即执行,这是正确的,但您并没有做到这一点
{
contact:
newState:
contact:
}
这是立即执行函数This.validateFieldsAndUpdateForm(type),而您希望传入一个回调以在状态转换后执行。所以你要找的是这样的东西:
this.setState(newState, this.validateFieldsAndUpdateForm(type));
this.setState(newState, this.validateFieldsAndUpdateForm(type));
这应该可以解决这个问题。我不知道如何解释你问题的最后一部分。如果您能在评论中澄清,我将编辑我的答案以提供帮助。明白了。这在es6中是什么样子的?在函数语法上苦苦挣扎。弄明白了!谢谢你,迈克尔<代码>this.setState(newState,()=>{this.validateFieldsAndUpdateForm(type);})代码>正准备编辑我的答案,哈哈。很乐意帮忙!