antd 动态增加表单添加默认值

关键代码如下

import React from 'react';
import ReactDOM from 'react-dom';
import 'antd/dist/antd.css';
import './index.css';
import {
Form, Input, Icon, Button,
} from 'antd';

let id = 2;

class DynamicFieldSet extends React.Component {
remove = (k) => {

const { form } = this.props;
// can use data-binding to get
const keys = form.getFieldValue('keys');
// We need at least one passenger
if (keys.length === 1) {
  return;
}

// can use data-binding to set
form.setFieldsValue({
keys: keys.filter(key => key !== k),
});

}

add = () => {

const { form } = this.props;
// can use data-binding to get
const keys = form.getFieldValue('keys');
const nextKeys = keys.concat({flg:id++,values:''});
// can use data-binding to set
// important! notify form to detect changes
form.setFieldsValue({
  keys: nextKeys,
});

}

handleSubmit = (e) => {

e.preventDefault();
this.props.form.validateFields((err, values) => {
  if (!err) {
    const { keys, names } = values;
    console.log('Received values of form: ', values);
    console.log('Merged values:', keys.map(key => names[key.flg]));
  }
});

}

render() {

const { getFieldDecorator, getFieldValue } = this.props.form;
const formItemLayout = {
  labelCol: {
    xs: { span: 24 },
    sm: { span: 4 },
  },
  wrapperCol: {
    xs: { span: 24 },
    sm: { span: 20 },
  },
};
const formItemLayoutWithOutLabel = {
  wrapperCol: {
    xs: { span: 24, offset: 0 },
    sm: { span: 20, offset: 4 },
  },
};
getFieldDecorator('keys', { initialValue: [{flg:0,values:'1'},{flg:1,values:'10'}] });
const keys = getFieldValue('keys');
const formItems = keys.map((k, index) => (
  <Form.Item
    {...(index === 0 ? formItemLayout : formItemLayoutWithOutLabel)}
    label={index === 0 ? 'Passengers' : ''}
    required={false}
    key={index}
  >
    {getFieldDecorator(`names[${k.flg}]`, {
      initialValue: k.values || '',
      validateTrigger: ['onChange', 'onBlur'],
      rules: [{
        required: true,
        whitespace: true,
        message: "Please input passenger's name or delete this field.",
      }],
    })(
      <Input placeholder="passenger name" style={{ width: '60%', marginRight: 8 }} />
    )}
    {keys.length > 1 ? (
      <Icon
        className="dynamic-delete-button"
        type="minus-circle-o"
        onClick={() => this.remove(k)}
      />
    ) : null}
  </Form.Item>
));
return (
  <Form onSubmit={this.handleSubmit}>
    {formItems}
    <Form.Item {...formItemLayoutWithOutLabel}>
      <Button type="dashed" onClick={this.add} style={{ width: '60%' }}>
        <Icon type="plus" /> Add field
      </Button>
    </Form.Item>
    <Form.Item {...formItemLayoutWithOutLabel}>
      <Button type="primary" htmlType="submit">Submit</Button>
    </Form.Item>
  </Form>
);

}
}

const WrappedDynamicFieldSet = Form.create({ name: 'dynamic_form_item' })(DynamicFieldSet);
ReactDOM.render(<WrappedDynamicFieldSet />, document.getElementById('container'));

···

参考文章https://segmentfault.com/q/1010000019019468

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值