700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 实现Ant Design自定义表单组件实例详解

实现Ant Design自定义表单组件实例详解

时间:2021-10-28 11:34:02

相关推荐

实现Ant Design自定义表单组件实例详解

web前端|js教程

Design,自定义,组件,表单,实现

web前端-js教程

Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法(使用起来确实很爽),这时需要自己动手封装一些表单,同时我们还要保持方法可以继续是使用。

18直播系统源码,vscode 多行输入,ubuntu munge,tomcat应用名,sqlite适合多线程码,shopex网店信使插件源代码,前端框架构图技巧教程,植物叶子上的小黑爬虫,php心理测试,seo导航网址,企业网站免费建站,css3实现网页滚动视差,thinkcmf 英文模板下载lzw

组件的源码

易语言版本更新源码,qq支持ubuntu吗,最好大学爬虫,php label,权威seo费用lzw

下面看一下如何自己封装表单组件,这是一个最基础的表单使用例子:

抽奖html源码,kali如何安装vscode,ubuntu卸载ghome,tomcat 如何 上万,菠萝爬虫,php获取mysql数据,seo自动生成工具分类,佛教网站源码免费下载,好看的个人视频网站模板免费下载lzw

1 import React, { PureComponent } from eact 2 import { Button, Form, Input, Radio } from antd 3 import FormItem from components/FormItem 4 5 const RadioGroup = Radio.Group 6 const options = [ 7{ label: 男, value: 1 }, 8{ label: 女, value: 2 }, 9 ] 10 11 class Test extends PureComponent { 12handleSubmit = (e) => { 13 e.preventDefault(); 14 15 const { form: { validateFields } } = this.props; 16 17 validateFields((errors, values) => { 18 if (errors) { 19 return; 20 } 21 console.log(values) 22 }) 23} 24 25render() { 26 const { form: { getFieldDecorator } } = this.props 27 28 const nameDecorator = getFieldDecorator( ame) 29 const sexDecorator = getFieldDecorator(sex) 30 31 return ( 32

33 3435 {nameDecorator()} 3637 3839 {sexDecorator()} 4041 42434445 46

47 ); 48} 49 } 50 51 export default Form.create()(Test)

现在需求需要我们实现多个姓名的提交,这时使用UI组件提供的表单便无法实现。

下面我们可以封装一个InputArrary组件:

1 import React, { PureComponent } from eact 2 import PropTypes from prop-types 3 import { Button, Icon, Input } from antd 4 5 import ./index.scss 6 7 class InputArray extends PureComponent { 8constructor(props) { 9 super(props) 10} 11 12handleChange = index => { 13 const { value, onChange } = this.props 14 const newValue = [...value] 15 16 newValue[index] = target.value 17 18 onChange(newValue) 19} 20 21handleDelete = e => { 22 const target = e.currentTarget 23 const index = target.parentNode.parentNode.firstChild.dataset.index 24 const { value, onChange } = this.props 25 const newValue = [...value] 26 27 newValue.splice(Number(index), 1) 28 29 onChange(newValue) 30} 31 32handleAdd = () => { 33 const { value, onChange } = this.props 34 const newValue = [...value, \] 35 36 onChange(newValue) 37} 38 39render() { 40 const { value, ...others } = this.props 41 42 const closeBtn = 43 44 return ( 45

46 {value.map((v, i) => { 47return ( 48

49 this.handleChange(i)} 55 /> 56

57); 58 })} 59

6061

62 63 ); 64} 65 } 66 67 InputArray.defaultProps = { 68value: [] 69 } 70 71 export default InputArray

这是我们就可以像引入Input组件一样引入InputArray组件实现了一组姓名的提交。

{nameDecorator()}</FormItem

组件主要使用的form提供getFieldDecorator方法,这个方法会向组件注入value参数,onChange方法,每次调用onChange方法都会去改变value,从而刷新整个组件。为什么会这样那,其实Ant Design 会在表单组件外层包裹一层组件,维护一个State值,每次onChange都是在改变外部state值,调用setState来刷新表单组件。

Upload组件使用中也遇到一个坑,Upload组件action上传地址参数也是必填参数,每次上传都会直接上传到服务器,不能和其它表单的数据一起提交,这时候我们也必须从新封装一个上传组件,同时因为存在文件或图片数据就不能使用json格式和后台进行交互,必须使用new FormData()的数据格式上传,也就是原生的表单的submit提交。

组件的源码

如果为你提供了一定的帮助,请点 start 支持一下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。