【发布时间】:2018-10-10 07:05:43
【问题描述】:
onSave=()=>{
if (this.state.intialValue<=0) {
this.setState({errorIntialValue: true})
}
else
{
this.setState({errorIntialValue: false})
}
if (this.state.age>=25|| this.state.age<=-1) {
this.setState({errorAge: true})
}
else{
this.setState({errorAge: false})
}
if (this.state.rollNo<0) {
this.setState({errorRollno: true})
}
else{
this.setState({errorRollno: false})
}
if(!(this.state.errorIntialValue|| this.state.errorAge ||errorRollno)){ //have to
enter only if no error
let newData={
intialValue:this.state.intialValue,
age:this.state.age,
rollNo:this.state.rollNo
}
this.props.updateData(newData)
}
我有一个 onClick 事件 onSave。如果表单中存在错误,我将它们的状态设置为 true。由于 SetState 是异步的,因此该值不会更新为其状态,并且在到达 if(!(this.state.errorIntialValue || this.state.errorAge || errorRollno)) 时始终未定义并且它返回 false。 if 块中的代码永远不会被执行。
我找不到合适的方法来实现这一点。我该怎么做?
【问题讨论】:
-
每次更改都不需要调用 setState,而是可以在更新的对象中设置值,最后调用 setState 一次
-
看来你最好使用
setState的功能版本和回调来实现这个功能 -
@BoyWithSilverWings 实际上我们也可以将回调与
setState()的“对象”版本一起使用 -
@skyboyer 功能版本,因为 OP 使用状态进行比较。回调用于不同的用例
-
@BoyWithSilverWings 同意你的看法。即使
onSave()有一天看起来像点击处理程序,它也可以在.setState之后以编程方式调用,并且事情会不同步