睡了一觉之后,我找到了解决这个问题的替代方法。
- 通过 Form.useForm() 创建表单实例
- 使用 form.setFieldsValue({ items: items})
通过这两个步骤,我们可以在提交时轻松将任何数据传递到表单中!
参见下面的简化代码:
const items = [
{
job: 'Engineer',
age: 20
},
{
job: 'Accountant',
age: 24
}
]
form.setFieldsValue({ items: items});
const onCreate = (values) => {
console.log(values);
}
const [form] = Form.useForm();
return (
<Form form={form} layout='vertical' onFinish={onCreate}>
<Form.Item name='items'>
<Table dataSource={items} />
</Form.Item>
</Form>
)
下面是我对可选表格和表格的实际使用。
import React, { useState, useEffect, useCallback } from 'react';
import Form from 'antd/lib/form';
import Table from 'antd/lib/table';
import api from 'api.js';
const FormTable = (props) => {
const [form] = Form.useForm();
const [jobs, setJobs] = useState([]);
const [filteredJobs, setFilteredJobs] = useState([]);
const [select, setSelect] = useState({
selectedRowKey: jobs.filter((item) => item.chosen).map((item) => item)
})
const rowSelection = {
selectedRowKey,
onChange: (selectedRowKey, selectedRows) => {
setSelect({
...select,
selectedRowKey: selectedRowKey,
});
const selectedJobs = [];
selectedRows.map((job) => {
selectedJobs.push({...job});
});
setFilteredJobs(selectedJobs);
form.setFieldsValue({ jobs: selectedRows});
},
};
const onGetJobs = useCallback(() => {
api.getJobs(id)
.then((response) => {
const data = response.data.results;
const jobsData = [];
data.map((job) => {
jobsData.push({
...job,
});
});
setJobs(jobsData);
})
.catch(() => {});
}, []);
return (
<>
<Form form={form}>
<Form.Item name="jobs">
<Table dataSource={filteredJobs} />
</Form.Item>
</Form>
</>
)