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

React使用useState管理状态时Overview页面数据未更新问题求助

你不需要使用useEffect,问题由以下3个代码逻辑错误导致:

  • 表单输入框缺少name属性
    你在Practice/GeneralInfo/Experience等表单组件中的输入字段仅设置了id,没有配置和state字段名对应的name属性。而handleChange函数是通过e.target.name读取key来更新state的,拿不到正确的key自然无法更新对应字段,切换到Overview页面时就看不到输入的内容。
  • handleButtonClick函数错误覆盖state
    你第一次调用setValues({isFormSaved: !values.isFormSaved})时没有解构之前的state,会把state内存储的姓名、邮箱、工作经历等所有其他字段全部清空,Overview自然无法渲染出数据。
  • 异步state更新导致的判断逻辑错误
    React的state更新是异步的,你在调用setValues之后立刻判断!values.isFormSaved时,拿到的还是更新前的旧值,按钮文本切换的逻辑会出错。

修复方案

  1. 优化handleButtonClick逻辑,合并两次setValues操作,用函数式更新拿到最新的prev state:
const handleButtonClick = () => {
  setValues(prev => ({
    ...prev,
    isFormSaved: !prev.isFormSaved,
    btnText: !prev.isFormSaved ? "Edit info" : "Save info"
  }));
};
  1. 为所有表单输入框添加name属性,值和state中的对应key保持一致,以Practice组件为例:
<input
  type="text"
  id="companyName"
  name="companyName" // 新增对应name属性
  onChange={values.onChange}
  disabled={values.disabled}
  placeholder={values.placeholder.companyName}
/>

所有输入框都需要按上述规则补充name属性。
3. (可选)优化handleChange用函数式更新避免闭包问题:

const handleChange = (e) => {
  const { name, value } = e.target;
  setValues(prev => ({ ...prev, [name]: value }));
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:07