当前位置: 首页 > news >正文

antd pro form 数组套数组 form数组动态赋值 shouldUpdate 使用

antd form中数组套数组

form数组动态变化 动态赋值
在这里插入图片描述

需求如上,同时添加多个产品,同时每个产品可以增加多台设备,根据设备增加相应编号,所以存在数组套数组,根据数组值动态变化
使用的知识点

  1. form.list form中的数组展示
  2. shouldUpdate 根据form值来动态变化
  3. 数组是引用类型
// An highlighted block
<div ><Formform={form}name="basic"labelCol={{flex: '90px',}}initialValues={{productList:[{bianHao:'',wuMiao:'',number:1,tType:'you',files:{},list:[{sheBei:'',guZi:'',ziYou:'',}],}]}}labelWrap={true}labelAlign="left"onFinish={onFinish}onFinishFailed={onFinishFailed}autoComplete="off">{/* <Card title="基本信息" bordered={false}><Row   gutter={16}><Col sm={24} md={12} lg={8} xxl={6}><Form.Itemlabel="最终用户"name="username"rules={[{required: true,message: '请输入',},]}><Input /></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Itemlabel="商务助理"name="userLian"rules={[{required: true,message: '请输入',},]}><Input /></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Itemlabel="测试用途"name="userPhone"rules={[{required: true,message: '请输入',},]}><Input /></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Itemlabel="项目预计招标/采购时间"name="userShou"rules={[{required: true,message: '请输入',},]}><Input /></Form.Item></Col><Col sm={24} ><Form.Itemlabel="备注"name="beiZhu"rules={[{required: true,message: '请输入',},]}><TextArea  /></Form.Item></Col><Col xl={24} sm={24}><Form.Item label='证明文件' ><Upload {...fileProps}><Button type="primary" icon={<UploadOutlined />}>点击上传</Button></Upload></Form.Item></Col></Row>   </Card> */}<Card title="基本信息" bordered={false}><Form.List name="productList" >{(fields, {add, remove}) => (<>{fields.map((field,index) => (<Row  gutter={16}>{/* 用得时候只需要修改下面,将需要重复展示的部分替换下面部分即可 注意 -----start*/ }<Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...field}label="产品名称"name={[field.name,"bianHao"]}rules={[{required: true,message: '请输入',},]}><Input placeholder="请输入" /></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...field}label="物料编码"name={[field.name,"wuMiao"]}rules={[{required: true,message: '请输入',},]}><Input placeholder="请输入" /></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...field}label="数量"name={[field.name,"number"]}rules={[{required: true,message: '请输入',},]}><InputNumber min={1} style={{width:'100%'}}/></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...field}label="单位"name={[field.name,"tType"]}rules={[{required: true,message: '请输入',},]}><Select><Select.Option value="you"></Select.Option><Select.Option value="zi"></Select.Option></Select></Form.Item></Col><Col sm={24}><Form.Item noStyle  shouldUpdate={(pre,cur) => {//    如果删除一条信息,cur.productList[index]是空值,所以需要判断if(cur.productList[index]&&pre.productList[index]){return pre.productList[index].number !== cur.productList[index].number}else{return false}}}>{({getFieldsValue}) =>{{/* 繁琐的计算:1.输入的数值比原来的数值大,计算差值,给原数组循环push2.手动在删除,输入框为空的时候,根据splice置空 (因为是空,所以计算出0)3.输入的数值比之前小,优先从后面删除,防止前面输入的被删除掉,依旧是操作原数组 splice  */}let number = getFieldsValue().productList[index].number;let list = getFieldsValue().productList[index].list;if(number>list.length){let cha = number - list.length;for(let i=0; i<cha ; i++){list.push({ sheBei:'',guZi:'',ziYou:'',})}}else if(number===''){list.splice(0,list.length)}else if(number<list.length){let cha = list.length - number;list.splice(number,cha)} return <Form.List name={[field.name,"list"]} >{(tLists) => (<>{tLists.map(tlist=>(<Row  gutter={16}><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...tlist}label="设备序列号"name={[tlist.name,"sheBei"]}rules={[{required: true,message: '请选择',},]}><Input/></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...tlist}label="固资编码"name={[tlist.name,"guZi"]}rules={[{required: true,message: '请选择',},]}><Input/></Form.Item></Col><Col sm={24} md={12} lg={8} xxl={6}><Form.Item {...tlist}label="自有编码"name={[tlist.name,"ziYou"]}rules={[{required: true,message: '请选择',},]}><Input/></Form.Item></Col></Row>))}</>)}</Form.List>}}</Form.Item></Col><Col sm={24} ><Form.Itemlabel="备注"{...field}name={[field.name,"beiZhu"]}rules={[{required: true,message: '请输入',},]}><TextArea  /></Form.Item></Col><Col xl={24} sm={24}><Form.Item label='证明文件' {...field}name={[field.name,"files"]} ><Upload customRequest={(option=> option.onSuccess())}beforeUpload={(file, fileList)=> fileVerification(file, fileList)}><Button type="primary" icon={<UploadOutlined />}>点击上传</Button></Upload></Form.Item></Col>{ /* 用得时候只需要修改下面,将需要重复展示的部分替换下面部分即可 -----end*/ }<div styleName="item_btn_wrap"><PlusCircleFilled styleName="add_item_btn" onClick={() => add({bianHao:'',wuMiao:'',number:1,tType:'you',beiZhu:'',files:{},list:[{sheBei:'',guZi:'',ziYou:'',}],})} />{fields.length>1&&<CloseCircleFilled  styleName="remove_item_btn" onClick={() => remove(field.name)} />}</div></Row>))}</>)}</Form.List></Card><Card>{/* <Row  gutter={16}><Col> */}{/* <Form.Item wrapperCol={{ offset: 8, span: 16 }}> */}<Form.Item styleName="right_layout"><Link to="/HW/HwBorrowList"><Button type="dashed">取消</Button></Link><Button style={{marginLeft:'20px'}} loading={saving} onClick={()=>onFinish('stage')}>暂存</Button><Button type="primary" style={{marginLeft:'20px'}} onClick={()=>onFinish('submit')}>提交</Button>{/* <Button type="primary" htmlType="submit">确认</Button> */}</Form.Item>{/* </Col></Row> */}</Card></Form></div>

使用注意

  1. Form.List 使用 {…field}或者{…tlist} 需要在name的前面,否则出错
  2. 中间有关于业务的逻辑,输入数量的计算
  3. shouldUpdate 方法使用,表单中值变化,可以根据index来获取是第几个,进而判断
  4. form数组的嵌套 运用两个form.list 嵌套,重点关注内层的 name 怎么写,进而进行内部的循环
  5. 在对form 的数组进行赋值的操作时 紧记 数组是引用类型 ,用getFieldsValue 来获取需要操作的数组,运用数组中的修改原数组的方法来操作,即可及时修改form值
    数组是引用类型
    数组是引用类型
    数组是引用类型

以上为代码和理解,欢迎指正

相关文章:

antd pro form 数组套数组 form数组动态赋值 shouldUpdate 使用

antd form中数组套数组 form数组动态变化 动态赋值 需求如上&#xff0c;同时添加多个产品&#xff0c;同时每个产品可以增加多台设备&#xff0c;根据设备增加相应编号&#xff0c;所以存在数组套数组&#xff0c;根据数组值动态变化 使用的知识点 form.list form中的数组…...

动态规划:918. 环形子数组的最大和

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路解题思路状态表示状态转移方程初始化填表顺序返回值 三、代码实现总结 前言 本篇文章仅是作为小白的我的一些理解&#xff0c;&#xff0c;…...

毅速丨模具3D打印材料有哪些选择

当前1.2709和CX是市面上最常用的3D打印模具钢材料&#xff0c;模具3D打印有没有更多的材料选择呢&#xff1f; 据了解&#xff0c;上海毅速推出的几款3D打印新材料正在被越来越多的行业所采用。如毅速的EM191S高性能高抛光不锈钢粉末&#xff0c;这款材料的抗开裂和耐腐蚀性能是…...

Springcloud笔记(1)-微服务和springcloud介绍

微服务简介 就是将一个大的应用&#xff0c;拆分成多个小的模块&#xff0c;每个模块都有自己的功能和职责&#xff0c;每个模块可以 进行交互&#xff0c;这就是微服务对于微服务&#xff0c;业界没有严格统一的定义&#xff0c;但是作为“微服务”这名词的发明人&#xff0c;…...

十六、代码校验(4)

本章概要 调试 使用 JDB 调试图形化调试器 调试 尽管聪明地使用 System.out 或日志信息能给我们带来对程序行为的有效见解&#xff0c;但对于困难问题来说&#xff0c;这种方式就显得笨拙且耗时了。 你也可能需要更加深入地理解程序&#xff0c;仅依靠打印日志做不到。此时…...

【已解决】No Python at ‘D:\Python\python.exe‘

起因&#xff0c;我把我的python解释器&#xff0c;重新移了个位置&#xff0c;导致我在Pycharm中的爬虫项目启动&#xff0c;结果出现这个问题。 然后&#xff0c;从网上查到了这篇博客: 【已解决】No Python at ‘D:\Python\python.exe‘-CSDN博客 但是&#xff0c;按照上述…...

蓝桥杯双周赛算法心得——数树数(dfs)

大家好&#xff0c;我是晴天学长&#xff0c;一个简单的dfs思想&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。 1) .数树数 2) .算法思路 代码的主要逻辑是&#xff1a; 1.使用Scanner读取输入的整数n和q&#xff0c;其中n表示测试用例的数量&am…...

综述:大规模小目标检测

论文地址: Towards Large-Scale Small Object Detection: Survey and Benchmarks​arxiv.org/abs/2207.14096 目录 摘要 1.Introduction 1.1 与之前综述的比较 1.2 总结 2.小目标检测回顾 2.1 问题定义 2.2 主要挑战 2.3 小目标检测算法回顾 3.小目标检测的数据集 …...

ORACLE XXX序列 goes below MINVALUE 无法实例化的处理办法

--序列增加区分 --删除未使用序列表 DECLARE V_CNT INT; BEGINSELECT COUNT(*) INTO V_CNT FROM USER_SEQUENCES WHERE SEQUENCE_NAME SEQ_INTELLECT_BIZ_DETAIL_ID;IF V_CNT1 THEN BEGINEXECUTE IMMEDIATE DROP SEQUENCE SEQ_INTELLECT_BIZ_DETAIL_ID;END;END IF; END; / ---…...

6款流程图制作软件:一站式指南

流程图是一种常用的图示工具&#xff0c;可以帮助我们更清晰地表达和展示流程、流程图等内容。在今天已经变得非常普及和便捷&#xff0c;接下来本文将于大家分享6款好用的流程图软件&#xff0c;一起来看看吧&#xff01; 博思白板boardmix 博思白板boardmix是一款基于浏览器…...

第三章:Python中的序列(上)

Python中的序列 是一种有序的数据结构,通常用于存储一组相关的元素。Python中的序列包括列表(list)、元组(tuple)和字符串(string)。 1. 列表 是最常用的序列类型,它是可变的(即可以添加、删除和修改元素)。列表中的元素可以是任何类型,包括其他列表或元组。列表…...

使用.NET实现WOL唤醒远程开机

文章目录 1. 背景2. 关于 WOL2.1 WOL 工作原理2.2 开启网卡唤醒功能 3. 快速验证3.1 局域网 Wake on Lan 应用3.2 Ubuntu 的 etherwake 命令4. 代码实现4.1 创建.NET控制台应用程序4.2 编写代码4.3 运行应用程序 5. 最后 1. 背景 家居自动化是现代智能家居的重要组成部分&…...

适用于 Golang 的任务调度程序 AGScheduler

以前一直使用 Python 的任务调度库 APScheduler&#xff08;支持任务持久化&#xff0c;支持多种存储方式&#xff09;&#xff0c;但由于没有找到和它功能和使用方式类似的 Golang 库&#xff0c;所以模仿 APScheduler 3.x 写了个简易版本的 AGScheduler。 AGScheduler Advan…...

【HCIP】HCIA复习

目录 大纲 情景代入 访问百度/谷歌服务器的准备工作 1、计算机网络发展第一阶段人机交互的加工过程 2、OSI参考模型 3、TCP/IP参考模型 访问谷歌&#xff08;百度&#xff09;服务器的流程 1、主机需要一个IP地址才能上网&#xff08;本场景中通过DHCP服务获取IP地址&a…...

【Python小项目之Tkinter应用】【实用工具】实现手写签名器,可选线条粗细,支持清空、撤销、恢复功能,可将写好的签名保存成图片

文章目录 前言一、实现思路二、关键代码三、完整代码总结同系列项目文章:前言 老规矩,先看效果: 在手写签名窗口中,用户可以选择线条粗细来签名,点击清空按钮可以清空画布,点击撤销按钮可以撤销一笔,点击恢复按钮可以撤销上一步进行的清空或撤销操作,点击保存按钮可以…...

Jenkins集成newman

一、Docker环境准备 二、Jenkins环境准备 三、登录Jenkins 安装NodeJs插件 四、Jenkins全局工具配置Nodejs 五、创建Jenkins自由风格项目 构建步骤1&#xff1a;选择Execute NodeJS script构建步骤2&#xff1a;选择执行shell脚本 六、将postman相关的脚本、环境变量数据、全局…...

Excel——对其他工作表和工作簿的引用

一、引用其他sheet页表区域 若希望在公式中引用其他工作表的单元格区域&#xff0c;可以在公式编辑状态下&#xff0c;通过鼠标单击相应的工作表标签&#xff0c;然后选择相应的单元格区域。 例1 跨sheet页引用其他工作表区域 如图1所示的工作表Sheet2为工资表。 在Sheet1表…...

如何正确的防止服务器被攻击?103.216.153.x

网站服务器被攻击是新建网站常常发生的事情&#xff0c;对于新手来说这也是非常棘手的问题。那么一旦遇到这样的情况&#xff0c;我们需要如何解决呢&#xff1f;怎么才能防止服务器被攻击&#xff0c;怎么保障自己网站信息的安全&#xff0c;如果发现被攻击又该怎么做呢&#…...

本地生活将成快手新的营收增长点

监制 | 何玺 排版 | 叶媛 快手本地生活开始强化B端市场。 据了解&#xff0c;快手 “本地商家”APP已经正式上线。这是快手为本地生活商家推出的独立工作平台&#xff0c;有助于商家提升经营效率。 新APP的上线&#xff0c;标志着快手本地生活业务布局&#xff0c;正从过去侧…...

信息化工程测试验收管理制度

1、总则 1.1、目的 为规范XXXXX单位的信息系统建设和工程项目测试验收准则&#xff0c;特制订本管理制度。 1.2、范围 本制度适用于XXXXX单位工程测试验收管理。 1.3、职责 信息系统建设和其他信息系统工程类项目的测试和验收主要由项目负责人负责&#xff0c;必要的时候…...

从零部署到实战标注:SUSTechPOINTS 3D点云标注平台全流程指南

1. 为什么选择SUSTechPOINTS进行3D点云标注 在自动驾驶研发过程中&#xff0c;3D点云标注是个绕不开的苦差事。我最早用过不少商业标注工具&#xff0c;不是价格贵得离谱&#xff0c;就是功能残缺不全。直到去年团队接手一个校企合作项目&#xff0c;才发现南方科技大学开源的这…...

FPGA实战:手把手教你用Verilog给NAND Flash数据上把“安全锁”(附完整ECC代码)

FPGA实战&#xff1a;用Verilog为NAND Flash打造硬件级ECC防护系统 1. 为什么你的NAND Flash需要硬件ECC&#xff1f; NAND Flash存储芯片在工业控制、物联网终端和边缘计算设备中扮演着关键角色&#xff0c;但它的物理特性导致数据可靠性存在先天缺陷。想象一下&#xff0c;当…...

Ubuntu安装中文输入法后无法输入中文----问题分析及解决方法

问题&#xff1a;之前在Ubuntu系统上安装过搜狗输入法&#xff0c;且能正常输入中文。但重启之后无法调出&#xff0c;Shift切换也不管用&#xff0c;依旧是英文原因分析&#xff1a;后台进程&#xff08;Fcitx&#xff09;卡死或崩溃了解决方法&#xff1a;重启Fcitx输入法框架…...

Qwen2.5-0.5B-Instruct新手入门:从零到一的AI助手搭建全流程

Qwen2.5-0.5B-Instruct新手入门&#xff1a;从零到一的AI助手搭建全流程 1. 认识Qwen2.5-0.5B-Instruct 1.1 模型特点与优势 Qwen2.5-0.5B-Instruct是阿里开源的通义千问系列中最轻量级的指令微调版本&#xff0c;专为资源有限环境优化设计。这个5.08亿参数的模型虽然体积小…...

PyTorch 2.8镜像快速部署:5分钟验证torch.cuda.is_available()并启动API服务

PyTorch 2.8镜像快速部署&#xff1a;5分钟验证torch.cuda.is_available()并启动API服务 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个开箱即用的高性能计算环境&#xff0c;专为现代AI工作负载优化。这个预配置环境能让你跳过繁琐的安装过程&#xff0c;直接进入模…...

MIKE URBAN中污水处理厂如何进行概化

01 前言应用厂网一体化耦合模型研究水厂间调度和厂前溢流入河污染量等内容时&#xff0c;由于不需要关注污水处理厂内部的具体处理工艺&#xff0c;需要对污水处理厂的关键设施进行概化处理。02 水厂资料收集收集污水处理的工艺流程图和设施设计参数。依据厂网一体化模型的研究…...

告别桌面混乱:NoFences让文件管理效率提升80%的空间收纳方案

告别桌面混乱&#xff1a;NoFences让文件管理效率提升80%的空间收纳方案 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 每天在杂乱的桌面图标中寻找文件&#xff0c;就像在堆…...

特朗普政府发布《国家人工智能立法框架》,多维度布局AI领域

【《国家人工智能立法框架》六大核心目标锚定AI发展方向】特朗普政府发布的《国家人工智能立法框架》&#xff0c;意在通过统一国家政策确保美国在AI领域的全球领先地位。该框架包含六大核心目标&#xff0c;分别是保护儿童与赋能家长、维护与强化美国社区、尊重知识产权与支持…...

CentOS部署PHP项目完整步骤

CentOS 7.9 部署 PHP 7.4 MySQL 5.7.44 完整步骤 由于 CentOS 7 已于 2024 年 6 月 30 日停止官方维护&#xff0c;原有的 yum 源已不可用&#xff0c;因此必须首先更换为阿里云镜像源才能正常安装软件。 一、系统环境准备 1.1 更换阿里云 YUM 源 # 1. 备份原有源 mv /etc/yum…...

保姆级教程:从WOS下载文献到Citespace出图,手把手搞定科研可视化(附避坑指南)

科研可视化实战&#xff1a;从WOS数据采集到Citespace图谱优化的完整指南 第一次打开Citespace时&#xff0c;看着满屏的英文参数和报错提示&#xff0c;我盯着屏幕发了十分钟呆——这大概是每个科研新手都会经历的"震撼教育"。文献计量分析本应是揭示知识脉络的利器…...