javascript - 反应:状态的布尔标志更新不够快
问题描述
我在 if 语句中使用的状态中保留了一个名为 validationPassed 的布尔标志。如果是真的,我允许 axios 请求发生。在此之前,我将 if 语句称为 doValidation(),它有很多 if 语句。如果其中一个失败,我将该布尔标志的状态设置为false
. 在 setState() 中,我放置了 console.log 回调,似乎布尔标志已成功设置为 false 但不是立即设置,因为 if(this.state.validationPassed) 在不应该的时候通过了。我知道 React 状态是异步的。尝试使用 prevState 参数来切换布尔值,但它不起作用。我该如何进行这项工作?也许还有另一种方法可以在没有布尔标志的情况下进行验证?
this.state = {
validationPassed: true
}
}
this.doValidation(usernameFromUser, passwordFromUser)
if(this.state.validationPassed){
// axios call
}
}
doValidation = (username, password) => {
if(username.trim().length === 0){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
if(password.trim().length === 0){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
if(username.trim().length < 8){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
if(username.trim().length > 20){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
if(password.trim().length < 8){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
if(new RegExp("^(?!(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,}))").test(password)){
this.setState( {
validationPassed: false }, () => {console.log(this.state.validationPassed)});
}
}
解决方案
尝试使用
阅读react setState 的文档
this.setState(
(currentStateValue)=> { value: !currentStateValue },
(state)=>{console.log(state)}
)
推荐阅读
- tensorflow - 在没有 sudo 的远程 PC 上安装 Tensorflow gpu
- javascript - Create fontawesome icon inside a span
- css - 角形材质迷你按钮周围显示一些正方形
- javascript - 如何将 JSON 对象获取到 React 组件?
- python - 如何将json转换为数据框
- javascript - 在使用 For 循环 JS 中分配变量
- python - 没有传入时如何避免“1”
- c# - ac#软件使用adb控制安卓设备
- php - mysql和PHP中两个日期的区别
- python - 在 Ubuntu 18.04 中导入 tensorflow-gpu 时遇到问题