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

React中如何将API返回数据作为useState表单初始值并避免报错

错误原因

组件首次渲染时,useEffect内的接口请求是异步执行的,此时data的初始值为空对象{},data[0]为undefined,直接访问data[0].AUD就会抛出类型错误。

解决步骤
  • 调整state初始值,避免初始化时读取未返回的接口数据
    data实际接收的是数组类型返回值,初始值改为空数组;memberfee的AUD字段先给兜底默认值,不要直接读取data[0].AUD
  • 接口请求拿到数据后,再更新memberfee的对应字段,覆盖初始默认值
  • 可选:新增加载状态,接口返回前禁止表单操作/展示加载提示,避免用户在初始值未加载完成时操作
修改后完整代码
// 调整data初始值为数组,符合接口返回的结构
const [data, setData] = useState([]);
const [show, setShow] = useState(false);
// memberfee初始值给AUD设置兜底默认值,不直接读取未返回的接口数据
const [memberfee,setMemberFee]=useState({
  AUD:"", // 可根据需求替换为你需要的默认数值
  CAD:"92.8",
  CHF:"69.14",
  EUR:"63.03",
  GBP:"54.22",
  KWD:"22.49",
  TRY:"648.18",
  USD:"74.65",
  XNA:"100000",
  NewMembershipInvest:"20",
  MembershipYearlyInvest:"1"
})
// 可选:新增加载状态
const [loading, setLoading] = useState(true);

let name,value;
const handleInputs=e=>{
  name=e.target.name;
  value=e.target.value;
  setMemberFee({...memberfee,[name]:value})
}

const submitForm=()=> {
  const {AUD ,CAD ,CHF ,EUR ,GBP ,KWD ,TRY ,USD ,XNA ,NewMembershipInvest ,MembershipYearlyInvest }=memberfee;
  const doc = {
      AUD ,CAD ,CHF ,EUR ,GBP ,KWD ,TRY ,USD ,XNA ,NewMembershipInvest ,MembershipYearlyInvest 
  };

  axios.put('/memfeeput', doc)
  .then( res => {
    alert('Updated successfully!');
   }   
  )
  .catch(err => {
    console.log(err.response);
    alert('An error occurred! Try submitting the form again.');
  });
}

useEffect(() => {
  async function fetchBooks() {
    try {
      const response = await fetch('/memfeeget');
      const json = await response.json();
      const resData = json.mf2;
      setData(resData);
      // 接口拿到数据后更新memberfee的对应字段
      if (resData?.[0]?.AUD) {
        setMemberFee(prev => ({...prev, AUD: resData[0].AUD}))
      }
    } catch (err) {
      console.error('接口请求失败', err)
    } finally {
      // 关闭加载状态
      setLoading(false);
    }
  }
  fetchBooks();
},[]);
补充说明

如果表单里其他字段也需要用接口返回值覆盖默认值,只需要在接口返回的判断逻辑里,把对应的字段都放到setMemberFee的更新逻辑里即可。加载状态可以绑定到表单的输入框、提交按钮的disabled属性上,体验更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:15:03