1.Form.List用法好处:可以使用antd中自带的验证。

2.不可控组件,用法简单

使用栗子:https://codesandbox.io/s/wonderful-lichterman-br63z?file=/index.js:1723-1742

可在form中加入初始值:

Form.List中可以有多个字段,name要定义为

name={[field.name, "lastName"]}   //第二项是组内设置的name值
           fieldKey={[field.fieldKey, "lastName"]}

      <Form.List name="users">{(fields, { add, remove }) => {/*** `fields` internal fill with `name`, `key`, `fieldKey` props.* You can extends this into sub field to support multiple dynamic fields.*/return (<div>{fields.map((field, index) => (<Row key={field.key}><Col><Form.Itemname={[field.name, "lastName"]}fieldKey={[field.fieldKey, "lastName"]}rules={rules}><Input placeholder="last name" /></Form.Item></Col><Col><Form.Itemname={[field.name, "firstName"]}fieldKey={[field.fieldKey, "firstName"]}rules={rules}><Input placeholder="first name" /></Form.Item></Col><Col flex="none"><MinusCircleOutlinedclassName="dynamic-delete-button"onClick={() => {remove(field.name);}}/></Col></Row>))}<Form.Item><Buttontype="dashed"onClick={() => {add();}}style={{ width: "100%" }}><PlusOutlined /> Add field</Button></Form.Item></div>);}}</Form.List><Form.Item><Button type="primary" htmlType="submit">Submit</Button></Form.Item>

3、如何给Form.List添加默认值:(使用initialValues)

<Form form={form} onFinish={onFinish} onFinishFailed={onFinishFailed} initialValues={{list: itemList}}><h2>优惠方案</h2><Form.List name='list'>{(fields, { add, remove }) => {console.log(fields);return (<div>{fields.map((field, index) => (<div className="row group" key={field.key}><Form.Item className='num'name={[field.name, 'minRange']}fieldKey={[field.fieldKey, 'minRange']}rules={[{validator: handleValitorMin} ]}><Input placeholder={2} addonAfter="人" type='number' /></Form.Item><span className='row-span'>——</span><Form.Item className='num' name={[field.name, 'maxRange']}fieldKey={[field.fieldKey, 'maxRange']}rules={[{validator: handleValitorMax }]}><Input addonAfter='人' type='number' /></Form.Item><span className='row-span'>的团报选手享受</span><Form.Item className='num discount'name={[field.name, 'discount']}fieldKey={[field.fieldKey, 'discount']}rules={[{validator: handleValitorDiscount}]}><Input addonAfter={selectAfter} placeholder="0-10整数或小数" type='number' /></Form.Item><span className="close-icon"><CloseCircleFilledclassName="dynamic-delete-button"onClick={() => {remove(field.name);}}/></span></div>))}<ButtononClick={handleAddItem}style={{ width: '80px' }}><PlusOutlined />新增</Button></div>);}}</Form.List></Form>

4、Form.List添加验证:(使用validator,自定义验证)

const handleValitorMax = (rule, value, callback)=>{let arr = rule.field.split('.');let index = Number(arr[1]) || 0;let discountItem = form.getFieldValue('list');let prevNum = Number(discountItem[index].minRange) || 2;value = Number(value);// console.log('max:', arr, prevNum, discountItem);if (!value) {return  Promise.reject('人数必填');}else if(value <= prevNum){return Promise.reject('人数要大于最小人数');}return  Promise.resolve();};

5、Form.List自定义添加一项(不使用默认的add方法)

const handleAddItem = ()=>{const list = form.getFieldValue('list');const nextList = list.concat(discountObj);form.setFieldsValue({list: nextList,});};

From.List用法详解相关推荐

  1. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  2. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  5. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  6. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

  7. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  8. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  9. WinDbg用法详解

    WinDbg用法详解 对WinDbg的方方面面作了详细的讲解. 转载于:https://blog.51cto.com/laokaddk/125111

  10. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

最新文章

  1. rest-framework:认证组件
  2. 转载:thread的六种状态
  3. Java垃圾收集蒸馏
  4. 阿里云java面试_20个高级Java面试题汇总
  5. 【项目总结】基于STM32的物流搬运小车
  6. 16进制颜色码转化rgba
  7. 公共邮箱,共享邮箱,免费邮箱,匿名邮箱,临时邮箱,免费收信
  8. zcu106 固化_xilinx zcu106 vcu demo
  9. 当初我要是这么学习操作系统就好了(附带思维导图)
  10. 【GNSS发展历史】
  11. 汉诺塔问题解法心路历程及C语言学习请教
  12. 学术-数学:费马猜想
  13. VA软屏和IPS硬屏的区别
  14. 什么是区块链的共识机制?
  15. 先学vba还是python-以Excel处理为目的学习python还是VBA?
  16. 数值积分法(1)————欧拉法
  17. [需求管理-4]:需求分析全过程:需求分析+资源评估+项目计划
  18. outlook express: socket error 10053 0x800ccc0f
  19. synchronize底层原理
  20. 任务管理器不能使用解决方法

热门文章

  1. 【集训队互测 2012】Middle
  2. Terminating app due to uncaught exception ‘NSInvalidArgumentException‘
  3. 永久关闭WPS热点,防止自启动
  4. 个人小项目原型图设计(主页)
  5. 域名注册好了怎么使用 注册域名后需要备案吗
  6. eigen 矩阵求逆_「伴随矩阵」Eigen库 矩阵基本操作:转置矩阵,逆矩阵,伴随矩阵,特征值 - seo实验室...
  7. Ubuntu 18.04 中Chrome浏览器安装与使用
  8. arduino定时器控制舵机_Arduino通过串口控制舵机角度
  9. NSOperation
  10. xdb 服务_oracle XDB的问题,端口、http服务