场景:
我需要动态的在页面中 添加相同的的表单 进行验证,使用的场景如下:
代码如下:
// 渲染通栏运营位置配置
const RenderBannerConfig = forwardRef((_, ref) => {
// 维护form数据列表
const fromList = [
{
FormInfo:{
labelCol: { span: 4 },
wrapperCol: { span: 20 },
},
ItemInfo:[
{
name:"bannerConfigImg",
label:"上传图片:",
Child: () => {
return (
<PicListUploader
placeholder="请上传图片"
width={1080}
minHeight={1080}
maxHeight={5760}
/>
)
}
},
{
name:"bannerConfigLink",
label:"配置链接:",
rules:[
{
required: true,
whitespace:true,
message: '配置链接接为必填项'
}
],
Child: () => {
return (
<Input placeholder="请输入配置链接" maxLength="50" style={{ width: "480px" }} />
)
}
},
{
name:"bannerConfigUser",
label:"展示用户:",
rules:[
{
required: true,
message: '展示用户信息为必填项'
}
],
Child:() => {
return (
<Select mode="tags" placeholder="请输入人群包ID" style={{ width: '480px' }} />
)
}
},
{
name:"bannerConfigInvalidTime",
label:"时间:",
rules:[
{
required: true,
message: '时间信息为必填项'
}
],
Child:() => {
return (
<RangePicker
showTime={{ format: 'HH:mm' }}
format="YYYY-MM-DD HH:mm"
/>
)
}
}
]
}
]
const [form] = Form.useForm();
const [formList, setformList] = useState(fromList)
return (
<>
<div style={{ margin: '20px 0' }}><strong>通栏运营位配置:</strong></div>
{
formList.map((item, index) => {
return (
<Form
form={form}
key={index}
name={`bannerInfoForm${index}`}
{...item.FormInfo}
>
{item.ItemInfo.map((card, _index)=> {
const { Child } = card
return (
<Form.Item
key={_index}
name={card.name}
label={card.label}
rules={card.rules}
>
<Child />
</Form.Item>
)
})}
</Form>
)
})
}
<Button onclick={() => form.validateFields()}></Button>
</>
)
})
问题:我循环了整个fromList数据、但是验证的时候获取不到values的值;浏览器打印结果如下:
请问一下是什么原因
查阅了资料发现 其实antd 不支持上图的写法。
可以参考:动态表单
以下是具体代码:
参考资料: