antd动态添加表单_react antd 动态表单

这篇博客展示了如何在React应用中结合Ant Design库动态创建表单。通过使用Antd的Form、InputNumber、Input、DatePicker和Select组件,实现了根据后台返回的数据格式动态生成表单,并提供了数据验证功能。在表单提交时,会验证所有字段并打印出表单的值。
摘要由CSDN通过智能技术生成

import React, { Component } from 'react';

import ReactDOM from'react-dom';

import { Form, InputNumber, Input, DatePicker, Button, Select } from'antd';

import moment from'moment';//推荐在入口文件全局设置 locale

import 'moment/locale/zh-cn';

moment.locale('zh-cn');

const FormItem=Form.Item;

const Option=Select.Option;//后台返回的数据格式

const data =[

{'field': 'jobid','text': '工号','errorMessage': '请输入工号','required': true,'type': 'int','value': 100},{'field': 'date','text': '日期','errorMessage': '请输入日期','required': false,'type': 'date','value': '2017-10-20'},{'field': 'username','text': '用户名','errorMessage': '请输入用户名','required': true,'type': 'char','value': 'hello world'},{'field': 'customer','text': '客户','errorMessage': '请输入客户','required': true,'type': 'select','value': '中兴','options': ['贝尔', '中兴', '烽火']

}

]//formItem css 样式

const formItemLayout ={

labelCol: {

xs: { span:24},

sm: { span:6},

},

wrapperCol: {

xs: { span:24},

sm: { span:14},

}

}//保存按钮 css 样式

const tailFormItemLayout ={

wrapperCol: {

xs: {

span:24,

offset:0,

},

sm: {

span:14,

offset:6,

},

}

}//form css 样式

const formLayout ={

width:400,

marginTop:100,

marginLeft:'auto',

marginRight:'auto'}

class App extends Component {

handleSubmit(e) {

e.preventDefault();this.props.form.validateFields((err, values) =>{if (!err) {

console.log('Received values of form: ', values);

}

});

}/**

* 根据后台返回的 data 中 type 类型生成不同的组件

* @param item json

* @param Component*/switchItem(item) {

const type=item.type;switch(type) {case 'int':return ;

break;case 'char':return ;

break;case 'date':return ;

break;case 'select':return({

item.options.map((option, index)=>{return ({option})

})

}

)default:return ;

break;

}

}

render() {

const { getFieldDecorator }= this.props.form;return(

{

data.map((item, index)=>{//type 为 date 日期格式需要强制转化为 moment 格式

item.value = item.type == 'date' ? moment(item.value, 'YYYY-MM-DD') : item.value;return(

key={index}

{...formItemLayout}

label={item.text}

hasFeedback>{getFieldDecorator(item.field, {

initialValue: item.value,

rules: [{

required: item.required,

message: item.errorMessage

}],

})(this.switchItem(item)

)}

)

})

}

保存

)

}

}

const AppForm=Form.create()(App);

ReactDOM.render(, document.getElementById('root'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值