react中表单数量不固定,每个都需要创建Form.useForm(),存入map集合
时间: 2023-11-22 15:53:01 浏览: 125
如果表单数量不固定,可以通过动态生成表单组件的方式来实现。在每个表单组件中,可以使用 `Form.useForm()` 来创建表单实例。
为了方便管理所有表单实例,可以将它们存入一个 Map 集合中,将表单组件的 key 作为 Map 的键,表单实例作为 Map 的值。示例代码如下:
```
import React, { useState } from 'react';
import { Form } from 'antd';
function DynamicForms(props) {
const [formMap, setFormMap] = useState(new Map());
const addForm = (key) => {
const form = Form.useForm()[0];
setFormMap((prevFormMap) => new Map(prevFormMap).set(key, form));
};
const removeForm = (key) => {
setFormMap((prevFormMap) => {
const newFormMap = new Map(prevFormMap);
newFormMap.delete(key);
return newFormMap;
});
};
const handleSubmit = () => {
// 通过遍历 formMap 来获取所有表单数据
for (const [key, form] of formMap) {
form.validateFields().then((values) => {
console.log(`Form ${key} submitted:`, values);
});
}
};
return (
<div>
{props.keys.map((key) => (
<div key={key}>
<Form form={formMap.get(key)}>
{/* 表单项 */}
</Form>
<button onClick={() => removeForm(key)}>删除表单 {key}</button>
</div>
))}
<button onClick={() => addForm(Date.now())}>添加表单</button>
<button onClick={handleSubmit}>提交所有表单</button>
</div>
);
}
```
在这个示例中,我们使用了一个 `formMap` 状态来存储所有的表单实例,`addForm()` 和 `removeForm()` 方法用于添加和删除表单实例。在表单组件中,我们根据 `key` 从 `formMap` 中获取对应的表单实例。
最后,我们在提交所有表单时遍历 `formMap`,对每个表单实例调用 `validateFields()` 方法来获取表单数据。
阅读全文