在用antd的时刻,我们假如要对表单举行增添和删除该怎么弄呢,以下:
import { connect } from 'dva';
import { Form, Input, Button } from 'antd';
import styles from './eg1.css';
const FormItem = Form.Item;
function Page(props) {
const { form } = props;
const { getFieldDecorator, getFieldValue } = form
// 表单提交
const handleSubmit = (e) => {
e.preventDefault();
form.validateFields((err, values) => {
if (!err) {
console.log(values);
}
});
}
// 增添
const add = () => {
const list = form.getFieldValue('list');
const nextList = list.concat({});
form.setFieldsValue({
list: nextList,
});
}
// 删除
const deleteRow = (index) => {
const list = form.getFieldValue('list');
const content = form.getFieldValue('content');
if (list.length === 1) {
return;
}
form.setFieldsValue({
list: list.filter((item, key) => key !== index),
content: content.filter((item, key) => key !== index),
});
}
getFieldDecorator('list', { initialValue: [{}] });
const list = getFieldValue('list');
const listContent = list.map((item, index) => {
return (
<FormItem label='称号:' key={index}>
{getFieldDecorator(`content[${index}].name`, {
rules: [{
required: true,
message: "称号不能为空!",
}],
})(
<Input placeholder="请输入称号" style={{ width: '60%', marginRight: 8 }} />
)}
{index > 0 ? (
<Button type="primary" onClick={deleteRow.bind(this, index)}>删除</Button>
) : null}
</FormItem>
);
});
return (
<div className={styles.normal}>
<Form onSubmit={handleSubmit}>
{listContent}
<FormItem>
<Button type="primary" htmlType="submit">提交</Button>
<Button type="primary" style={{ marginLeft: '10px' }} onClick={add}>增添</Button>
</FormItem>
</Form>
</div>
);
}
const page = Form.create()(Page);
export default connect()(page);
这里不仅能对表单举行增添和删除,还能对表单举行考证,看是不是有输入,以上是自身没有数据的状况,假如是有数据的状况以下:
import React from 'react';
import { connect } from 'dva';
import { Form, Input, Button } from 'antd';
import styles from './eg2.css';
const FormItem = Form.Item;
function Page(props) {
const { form } = props;
const { getFieldDecorator, getFieldValue } = form
// 表单提交
const handleSubmit = (e) => {
e.preventDefault();
form.validateFields((err, values) => {
if (!err) {
console.log(values);
}
});
}
// 增添
const add = () => {
const list = form.getFieldValue('list');
const nextList = list.concat({});
form.setFieldsValue({
list: nextList,
});
}
// 删除
const deleteRow = (index) => {
const list = form.getFieldValue('list');
const content = form.getFieldValue('content');
if (list.length === 1) {
return;
}
form.setFieldsValue({
list: list.filter((item, key) => key !== index),
content: content.filter((item, key) => key !== index),
});
}
const slist = [{
id:'0001',
name: '拂晓'
}, {
id:'0002',
name: '好天'
}]
getFieldDecorator('list', { initialValue: slist });
const list = getFieldValue('list');
const listContent = list.map((item, index) => {
getFieldDecorator(`content[${index}].id`, {initialValue: item.id || ''})
return (
<FormItem label='称号:' key={index}>
{getFieldDecorator(`content[${index}].name`, {
rules: [{
required: true,
message: "称号不能为空!",
}],
initialValue: item.name || ''
})(
<Input placeholder="请输入称号" style={{ width: '60%', marginRight: 8 }} />
)}
{index > 0 ? (
<Button type="primary" onClick={deleteRow.bind(this, index)}>删除</Button>
) : null}
</FormItem>
);
});
return (
<div className={styles.normal}>
<Form onSubmit={handleSubmit}>
{listContent}
<FormItem>
<Button type="primary" htmlType="submit">提交</Button>
<Button type="primary" style={{ marginLeft: '10px' }} onClick={add}>增添</Button>
</FormItem>
</Form>
</div>
);
}
const page = Form.create()(Page);
export default connect()(page);
平常假如自身有数据,都邑有每行数据的id,然则这个id不显现,我们都邑用getFieldDecorator给id声明,如许在我们提交表单的时刻,就能够获得表单抓取到id的数据,有数据跟没有数据的差异就是,有数据需要在表单getFieldDecorator的时刻给一个初始值,其他两者都一样
详细代码下载地点:https://gitee.com/hope93/antd…