2016-04-12 17:02:17 +08:00
|
|
|
|
---
|
2016-10-31 15:42:57 +08:00
|
|
|
|
order: 5
|
2016-09-01 11:48:38 +08:00
|
|
|
|
title:
|
2016-07-31 09:53:51 +08:00
|
|
|
|
zh-CN: 动态增减表单项
|
2016-10-31 15:42:57 +08:00
|
|
|
|
en-US: Dynamic Form Item
|
2016-04-12 17:02:17 +08:00
|
|
|
|
---
|
|
|
|
|
|
2016-07-31 09:53:51 +08:00
|
|
|
|
## zh-CN
|
|
|
|
|
|
2016-04-12 17:02:17 +08:00
|
|
|
|
动态增加、减少表单项。
|
|
|
|
|
|
2016-07-31 09:53:51 +08:00
|
|
|
|
## en-US
|
|
|
|
|
|
2016-07-31 10:01:58 +08:00
|
|
|
|
Add or remove form items dynamically.
|
2016-07-31 09:53:51 +08:00
|
|
|
|
|
2016-04-12 17:02:17 +08:00
|
|
|
|
````jsx
|
|
|
|
|
import { Form, Input, Button } from 'antd';
|
|
|
|
|
|
|
|
|
|
let uuid = 0;
|
|
|
|
|
let Demo = React.createClass({
|
2016-09-01 11:48:38 +08:00
|
|
|
|
componentWillMount() {
|
|
|
|
|
this.props.form.setFieldsValue({
|
|
|
|
|
keys: [0],
|
|
|
|
|
});
|
|
|
|
|
},
|
2016-04-12 17:02:17 +08:00
|
|
|
|
remove(k) {
|
|
|
|
|
const { form } = this.props;
|
|
|
|
|
// can use data-binding to get
|
2016-10-31 15:42:57 +08:00
|
|
|
|
const keys = form.getFieldValue('keys');
|
|
|
|
|
const nextKeys = keys.filter((key) => {
|
2016-04-12 17:02:17 +08:00
|
|
|
|
return key !== k;
|
|
|
|
|
});
|
|
|
|
|
// can use data-binding to set
|
|
|
|
|
form.setFieldsValue({
|
2016-10-31 15:42:57 +08:00
|
|
|
|
keys: nextKeys,
|
2016-04-12 17:02:17 +08:00
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
add() {
|
|
|
|
|
uuid++;
|
|
|
|
|
const { form } = this.props;
|
|
|
|
|
// can use data-binding to get
|
2016-10-31 15:42:57 +08:00
|
|
|
|
const keys = form.getFieldValue('keys');
|
|
|
|
|
const nextKeys = keys.concat(uuid);
|
2016-04-12 17:02:17 +08:00
|
|
|
|
// can use data-binding to set
|
|
|
|
|
// important! notify form to detect changes
|
|
|
|
|
form.setFieldsValue({
|
2016-10-31 15:42:57 +08:00
|
|
|
|
keys: nextKeys,
|
2016-04-12 17:02:17 +08:00
|
|
|
|
});
|
|
|
|
|
},
|
2016-10-31 15:42:57 +08:00
|
|
|
|
handleSubmit(e) {
|
2016-04-12 17:02:17 +08:00
|
|
|
|
e.preventDefault();
|
2016-10-31 15:42:57 +08:00
|
|
|
|
|
|
|
|
|
this.props.form.validateFields((err, values) => {
|
|
|
|
|
if (err) {
|
|
|
|
|
return;
|
2016-07-04 12:13:29 +08:00
|
|
|
|
}
|
2016-10-31 15:42:57 +08:00
|
|
|
|
|
|
|
|
|
console.log('Received values of form: ', values);
|
2016-07-04 12:13:29 +08:00
|
|
|
|
});
|
2016-04-12 17:02:17 +08:00
|
|
|
|
},
|
|
|
|
|
render() {
|
2016-09-01 11:48:38 +08:00
|
|
|
|
const { getFieldDecorator, getFieldValue } = this.props.form;
|
2016-04-12 17:02:17 +08:00
|
|
|
|
|
|
|
|
|
const formItemLayout = {
|
|
|
|
|
labelCol: { span: 6 },
|
|
|
|
|
wrapperCol: { span: 18 },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const formItems = getFieldValue('keys').map((k) => {
|
|
|
|
|
return (
|
2016-07-31 09:53:51 +08:00
|
|
|
|
<Form.Item {...formItemLayout} label={`good friend${k}:`} key={k}>
|
2016-09-01 11:48:38 +08:00
|
|
|
|
{getFieldDecorator(`name${k}`, {
|
2016-07-04 12:13:29 +08:00
|
|
|
|
rules: [{
|
|
|
|
|
required: true,
|
|
|
|
|
whitespace: true,
|
2016-07-31 09:53:51 +08:00
|
|
|
|
message: "Your good friend's name",
|
2016-07-04 12:13:29 +08:00
|
|
|
|
}],
|
2016-09-01 11:48:38 +08:00
|
|
|
|
})(
|
2016-09-21 22:27:26 +08:00
|
|
|
|
<Input style={{ width: '60%', marginRight: 8 }} />
|
2016-09-01 11:48:38 +08:00
|
|
|
|
)}
|
2016-07-31 09:53:51 +08:00
|
|
|
|
<Button onClick={() => this.remove(k)}>remove</Button>
|
2016-04-12 17:02:17 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
return (
|
2016-10-31 15:42:57 +08:00
|
|
|
|
<Form horizontal onSubmit={this.handleSubmit}>
|
2016-04-29 12:13:27 +08:00
|
|
|
|
{formItems}
|
2016-04-12 17:02:17 +08:00
|
|
|
|
<Form.Item wrapperCol={{ span: 18, offset: 6 }}>
|
2016-07-31 09:53:51 +08:00
|
|
|
|
<Button onClick={this.add} style={{ marginRight: 8 }}>add good friend</Button>
|
2016-10-31 15:42:57 +08:00
|
|
|
|
<Button type="primary" htmlType="submit">submit</Button>
|
2016-04-12 17:02:17 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
</Form>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Demo = Form.create()(Demo);
|
|
|
|
|
ReactDOM.render(<Demo />, mountNode);
|
|
|
|
|
````
|