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

API返回JSON嵌套致React编辑表单onChange失效问题求助

解决方案:解嵌套API Payload并修复表单逻辑

1. 解嵌套API返回的Payload

在获取数据时,直接将返回结构中data字段内的内容与status字段合并到顶层状态,保持和原API返回的扁平结构一致:

React.useEffect(() => {
  const fetchData = async () => {
    setLoading(true);
    try {
      const res = await axios.get(`${detailsUrl + selectedRecord.id}`);
      // 合并嵌套的data字段与status到顶层
      setValues({ 
        ...res.data.data, 
        status: res.data.status 
      });
    } catch (error) {
      // 错误响应同样处理嵌套结构
      setValues({ 
        ...error.response.data.data, 
        status: error.response.data.status 
      });
    }
    setLoading(false);
  };
  fetchData();
}, []);

2. 调整表单组件绑定

现在values回到扁平结构,直接绑定顶层字段到表单控件:

<Form onSubmit={handleSubmit} >
  <Controls.Input  
      type='text'
      onChange={handleInputChange}
      name='name'
      label='Equipment Name'
      value={values.name || ''}
  /> 
  <Controls.Input  
      type='text'
      onChange={handleInputChange}
      name='dimensions'
      label='Equipment Dimensions'
      value={values.dimensions || ''}
  />  
  <Button
      type='submit'
      text='Submit'
      onClick={handleSubmit}
   />
</Form>

3. 修复表单验证逻辑

更新验证函数,针对顶层字段进行校验:

const validate = (fieldValues = values) => {
  const temp = { ...errors };
  if ('name' in fieldValues) { 
      temp.name = fieldValues.name ? '' : 'Equipment Name is required.';
  }
  if ('dimensions' in fieldValues) {
    temp.dimensions = fieldValues.dimensions ? '' : 'Dimensions are required.';
  }
  setErrors({ ...temp });
  if (fieldValues === values) {
      return Object.values(temp).every(x => x === ''); 
  }
};

4. 提交数据时使用扁平结构

提交接口时直接传递顶层的name和dimensions字段,无需嵌套:

const handleSubmit = async (e) => {
  e.preventDefault();
  if (validate()) {
    try {
      await axios.post(submitUrl, {
        name: values.name,
        dimensions: values.dimensions
      });
      // 提交成功后的后续逻辑(如提示、页面跳转等)
    } catch (error) {
      // 错误处理逻辑
    }
  }
};

以上修改后,表单的onChange事件会正确更新对应字段,不会再出现新增data.name这类顶层字段的问题,同时完全适配新API的返回结构,且满足提交时无需嵌套的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:24:51