React中verifyPassword函数内调用setUser更新user状态未生效问题
问题原因与修复方案
- 核心错误是你错误地对状态更新函数
setUser进行了赋值操作,而非调用它执行状态更新:
原错误写法:
setUser=({ name:name, phone:phone, email:email })
你直接通过等号覆盖了React返回的setUser更新函数,没有触发状态更新逻辑,所以user状态始终不会变化。
正确写法是去掉等号,调用setUser函数即可:
setUser({ name: name, phone: phone, email: email }) // 因为接口返回的res字段和user状态字段完全匹配,也可以直接简写为 setUser(res)
- 关于更新后立刻打印user拿到空值的说明:
React的状态更新是异步批量执行的,调用setUser后不会立刻修改当前作用域下的user变量,本次渲染闭包里的user还是更新前的旧值,打印为空属于正常现象。状态更新完成后组件会重新渲染,下一次渲染拿到的user就是最新值。
可选优化建议
React项目中不推荐引入jQuery做网络请求,你可以用原生fetch或者axios这类轻量请求库替代,避免引入整个jQuery增加项目包体积。
内容的提问来源于stack exchange,提问作者chaos
相关产品推荐
相关产品推荐

