React setState回调使用问题:isValidating state未更新始终为true
问题根因
错误出在handleOnSubmit方法中setState回调的传参写法:
// 你的错误写法 this.setState({ isValidating : true, }, this.validateFields());
此处你给validateFields加了括号,相当于直接执行该函数,而不是将函数作为回调传入,等待setState状态更新完成后再执行。执行顺序完全错乱:
- 触发提交事件进入
handleOnSubmit - 先同步执行
validateFields,内部将isValidating设为false - 最后才执行setState将
isValidating更新为true,后续没有任何逻辑再修改这个状态,所以加载提示会一直显示。
修复方法
将setState的第二个参数改为函数引用即可,直接去掉括号:
this.setState({ isValidating : true, }, this.validateFields);
如果要避免上下文绑定异常,也可以用箭头函数包裹:
this.setState({ isValidating : true, }, () => this.validateFields());
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

