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

在React-Admin的SimpleFormIterator中添加隐藏ID字段的方法

解决React-Admin SimpleFormIterator子记录ID提交丢失问题

方案1:使用HiddenInput存储子记录ID

react-admin内置了HiddenInput组件,专门处理无需用户可见但需提交的字段,比给TextInput加hidden属性更可靠,不会渲染可见输入元素:

import { SimpleFormIterator, HiddenInput, TextInput } from 'react-admin';

// 在表单中配置
<SimpleFormIterator>
  <HiddenInput source="id" /> {/* 绑定子记录的ID字段 */}
  <TextInput source="name" label="子记录名称" />
  {/* 其他子记录字段 */}
</SimpleFormIterator>

该组件会自动将ID值纳入表单提交数据,且不会在页面显示任何元素。

方案2:自定义隐藏输入组件(适配特殊场景)

若因版本或其他原因无法使用HiddenInput,可自行实现基于type="hidden"的输入组件:

import { useInput } from 'react-admin';

const CustomHiddenInput = ({ source }) => {
  const { input } = useInput({ source });
  return <input type="hidden" {...input} />;
};

// 使用示例
<SimpleFormIterator>
  <CustomHiddenInput source="id" />
  {/* 其他子记录字段 */}
</SimpleFormIterator>

这种方式同样能确保ID被提交,且无页面显示元素。

关于SimpleFormIterator的key属性

无需通过key直接获取子记录ID,只要确保子项表单字段正确绑定source="id",SimpleFormIterator会自动迭代数组元素,将对应ID值关联到输入组件。如果你的子记录数组结构类似[{id: 1, name: 'xxx'}, {id: 2, name: 'yyy'}],用上述隐藏输入组件绑定source="id"后,提交时ID会被包含在每个子对象中。

验证提交数据

可在表单onSubmit回调中打印提交数据,确认ID是否正确包含:

const handleSubmit = (values) => {
  console.log('提交的数据:', values);
  // 检查子记录数组中的ID是否存在
  // 后续保存逻辑
};

<SimpleForm onSubmit={handleSubmit}>
  {/* 父字段及SimpleFormIterator配置 */}
</SimpleForm>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:52:02