You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React函数组件异步请求后修改state不生效问题排查解决

问题根源

问题核心是AuthService.login为异步函数,原代码未使用await等待其执行完成就直接判断返回值:

  • 异步函数默认返回Promise对象,pending状态的Promise转为布尔值恒为true,因此!AuthService.login(event.target)的结果永远是false,if分支内的setIsLoading(false)永远不会触发
  • 原代码的提交事件逻辑拆分不合理,loading状态的切换应该统一放在提交处理逻辑内维护,避免时序混乱
修复方案

首先修改handleSubmit为异步函数,统一维护loading状态,同时移除form标签onSubmit里冗余的setIsLoading(true)逻辑:

// 修复后的handleSubmit逻辑
async function handleSubmit (event) {  
  event.preventDefault();
  // 提交开始直接设为加载中,统一在这里维护状态
  setIsLoading(true)
  try {
    await AuthService.login(event.target);
    // 登录成功的后续逻辑可在这里补充
  } catch (e) {
    // 登录失败的错误处理,比如弹出错误提示
    console.log('登录失败', e);
  } finally {
    // 无论请求成功或失败,最终都关闭加载状态
    setIsLoading(false)
  }
}

对应修改form标签的提交事件绑定:

<form className={classes.form} noValidate onSubmit={handleSubmit}>

内容的提问来源于stack exchange,提问作者Federico Arona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:36:00