Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reactjs setState上的一次性错误(?)_Javascript_Reactjs - Fatal编程技术网

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);})正准备编辑我的答案,哈哈。很乐意帮忙!