antd Form shouldUpdate 关联展示 form 数组赋值

news2024/9/27 12:08:51

form 数组中嵌套数值更新

注意:数组是引用类型

在这里插入图片描述
项目需求,表单中包含多个产品信息,使用form.list 数组嵌套,提货方式如果是邮寄展示地址,如果是自提,需要在该条目中增加两项

代码如下:
// An highlighted block
<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,"kuCun"]}
                                                            rules={[{
                                                                    required: true,
                                                                    message: '请选择',
                                                                },]}
                                                                >
                                                            <Select>
                                                                <Select.Option value="u238475">u238475</Select.Option>
                                                                <Select.Option value="u238472">u238472</Select.Option>
                                                            </Select>
                                                        </Form.Item>
                                                </Col>
                                                <Col sm={24} md={12} lg={8} xxl={6}>
                                                        <Form.Item 
                                                            {...field}
                                                            label="产品线"
                                                            name={[field.name,"chanPin"]}
                                                            rules={[{
                                                                    required: true,
                                                                    message: '请输入',
                                                                },]}
                                                                >
                                                             <Select>
                                                                <Select.Option value="you1">CTM-产品1</Select.Option>
                                                                <Select.Option value="zi1">CTM-产品2</Select.Option>
                                                            </Select>
                                                        </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,"tType"]}
                                                            rules={[{
                                                                    required: true,
                                                                    message: '请输入',
                                                                },]}
                                                                >
                                                            <Select>
                                                                <Select.Option value="you">邮寄</Select.Option>
                                                                <Select.Option value="zi">自提</Select.Option>
                                                            </Select>
                                                        </Form.Item>
                                                </Col>
                                                <Form.Item noStyle  shouldUpdate={(pre,cur) => {
                                                //    如果删除一条信息,cur.productList[index]是空值,所以需要判断
                                                    if(cur.productList[index]&&pre.productList[index]){
                                                        // 判断当前是自提还是邮寄
                                                        return pre.productList[index].tType !== cur.productList[index].tType
                                                    }else{
                                                        return false
                                                    }
                                                }}>
                                                    {({getFieldValue}) =>{
                                                        const type = getFieldValue('productList')
                                                        
                                                        {/* 当前是自提的时候需要填写自提人信息 */}

                                                        if(type[index].tType&&type[index].tType=='zi'){
                                                        return <>
                                                        <Col sm={24} md={12} lg={8} xxl={6}>
                                                                <Form.Item 
                                                                    {...field}
                                                                    label="自提人姓名"
                                                                    name={[field.name,"tName"]}
                                                                    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,"tShen"]}
                                                                    rules={[{
                                                                            required: true,
                                                                            message: '请输入',
                                                                        },]}
                                                                        >
                                                                        <Input placeholder="请输入" />

                                                                </Form.Item>
                                                        </Col>
                                                        </>
                                                        }else{
                                                            {/* 有一个问题,当切换回邮寄。之前填写的自提人和身份证号删除
                                                                (只需要将type数组中的数据清空即可,不需要再特意给form赋值,他们是引用类型) */}
                                                            Object.assign(type[index],{tName:'',tShen:''})
                                                            return <></>
                                                        }

                                                    }}

                                                </Form.Item>
                                               

                                                { /* 用得时候只需要修改下面,将需要重复展示的部分替换下面部分即可 -----end*/ }
                                                        
                                                <div styleName="item_btn_wrap">
                                                    <PlusCircleFilled styleName="add_item_btn" onClick={() => add({tType:'zi'})} />
                                                    {fields.length>1&&<CloseCircleFilled  styleName="remove_item_btn" onClick={() => remove(field.name)} />}
                                                </div>
                                    </Row>
                                ))}
                                </>

                            )}

                    </Form.List>
                </Card>
**关键点解释**

 1. shouldUpdate 是依赖当前form中的变化。所以在其中加上判断,pre是之前 cur是当前,然后根据数组嵌套找到当前值变化就返回true,就会走下面的代码
 2. Form.Item noStyle 是没有样式的,不需要添加{...field} 不是其中一项
 3. getFieldValue 获取当前的form值,根据值来展示

问题 在切换不展示时,之前填写的值不清空,所以重点来了
数组是引用类型
数组是引用类型
数组是引用类型

之前一直解决不了,还想用setFomValue来解决,根本不用,因为数组是引用类型,所以直接操作原来的数组值就可以

// An highlighted block
Object.assign(type[index],{tName:'',tShen:''})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提升企业管理效率!金蝶软件配置自定义域名,快速实现公网远程访问

文章目录 前言1. 保留自定义域名2. 域名解析3. 配置自定义域名4. 关于服务器选择以及域名备案的说明4.1 关于服务器地区的选择&#xff1a;4.2 关于自定义域名备案&#xff1a;4.3 关于域名过白名单&#xff1a; 前言 上篇文章我们讲过如何安装金蝶云星空&#xff0c;实现异地…

深度学习DAY3:高斯噪声

噪声 1 噪声定义 噪声是电路或系统中不含信息量的电压或电流。在工业与自然界中&#xff0c;存在着各种干扰源&#xff08;噪声源&#xff09;&#xff0c;如大功率电力电子器件的接入、大功率用电设备的开启与断开、雷击闪电等都会使空间电场和磁场产生有序或无序的变化&…

01 初识FPGA

01 初识FPGA 一.FPGA是什么 FPGA&#xff08;Filed Programmable Gate Array&#xff09;&#xff0c;现场可编程门阵列&#xff0c;一种以数字电路为主的集成芯片&#xff0c;属于可编程逻辑器件PLD的一种。 1.1 两大巨头 Xilinx(赛灵思)Altera&#xff08;阿尔特拉&#…

普通物理 A2 期末复习

普通物理 A2 期末复习 本文首发于 2023-06-20 在 https://chenhaotian.top/study/general-physics-a2-final-review/ 总结 第十章 机械振动和电磁振荡 10-1 谐振动 弹簧振子的谐振动 位移 速度 加速度 特征量 旋转矢量法 单摆 能量 题&#xff1a;振动方程 题&#xff1a;振…

XLSX.utils.sheet_to_json() 数字格式转为字符串格式

raw 默认为true&#xff0c;设置为false就可以了 XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {raw:false})

B端产品需求分析的思路和方法 4大方面

需求分析对产品成功和客户满意度至关重要&#xff0c;它帮助团队深入了解用户需求&#xff0c;优化用户体验&#xff0c;减少开发中的需求变更&#xff0c;降低开发风险。如果缺乏产品分析&#xff0c;容易造成产品定位不准确&#xff0c;用户体验不佳&#xff0c;不能满足用户…

canvas基础1

直线 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <b…

(十五)VBA常用基础知识:正则表达式的使用

vba正则表达式的说明 项目说明Pattern在这里写正则表达式&#xff0c;例&#xff1a;[\d]{2,4}IgnoreCase大小写区分&#xff0c;默认false&#xff1a;区分&#xff1b;true&#xff1a;不区分Globaltrue&#xff1a;全体检索&#xff1b;false&#xff1a;最小匹配Test类似p…

docker应用记录总结

一、前言 docker这类部署工具&#xff0c;久而久之不使用非常容易忘记&#xff0c;甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结&#xff0c;纯属是温故知新。 二、docker部署应用 1、docker印象 docker首先让我想到的是是虚拟化技术&…

Uniapp中父子页面传值

效果 实现 A页面 点击图一按钮进入图二页面 <view class"cu-form-group margin-top"><button class"cu-btn sm bg-gradual-green" style"margin-left: 70%; " click"selectMaterial">选择物料</button></view…

联邦学习中的攻击手段和防御机制

联邦学习产生的背景&#xff1a; 海量数据的生成和这些数据的后续处理往往需要一个数据仓库并在仓库内汇总数据。然而&#xff0c;随着数据泄漏事件层出不穷&#xff0c;数据安全性得不到保障&#xff0c;人们开始怀疑集中收集数据是否可靠&#xff0c;数据的隐私性的也得到了更…

Web应用防火墙的重要性及基本原理

企业网络安全是保障业务稳定运行的基础&#xff0c;而Web应用防火墙&#xff08;WAF&#xff09;是这个基础上的重要一环。本文将为你详细介绍WAF的基本原理&#xff0c;并探讨其在维护网络安全中的重要作用。 一、Web应用防火墙是什么&#xff1f; Web应用防火墙&#xff08;…

VSCode插件开发概述

目录 VSCode插件开发概述vscode插件vscode插件的用途脚手架安装重要文件package.jsonactivationEvents extension.js一个简单的例子本地打包 VSCode插件开发概述 vscode插件 vscode 是微软推出的一款轻量级代码编辑器&#xff0c;在使用的时候总会需要安装一些插件去协助我们…

[代码学习]einsum详解

einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和&#xff0c;该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和&#xff0c;输入单个或多个 Tensor&#xff0c;输出单个 Tensor。 paddle.einsum(equation, *opera…

Win11自定义目录安装Linux子系统wsl

1. 启用适用于 Linux 的 Windows 子系统和虚拟机功能 以管理员身份打开 PowerShell&#xff08;“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”&#xff09;&#xff0c;然后依次输入执行以下命令&#xff1a; dism.exe /online /enable-feature /f…

3ds Max渲染太慢?创意云“一键云渲染”提升3ds Max渲染体验

&#xfeff;在数字艺术设计领域&#xff0c;3ds Max是广泛使用的三维建模和渲染软件之一。然而&#xff0c;许多用户都面临着一个共同的问题&#xff1a;渲染速度太慢。渲染一帧画面需要耗费数小时&#xff0c;让人无法忍受。除了之前给大家介绍的几种解决方法外&#xff1a; …

【斗破年番】导演紧急删减第66集预告,陨落心炎事件要重演?

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗破苍穹年番最新资讯。 斗破苍穹年番第65集已经出来了&#xff0c;在这一集出来后按例官方放出来第66集和第67集的预告。只是让小郑没有想到的是&#xff0c;刚开始看第66集预告还好好的&#xff0c;但是等到再看的时候就…

代理SSL证书的优势——JoySSL

随着互联网的发展&#xff0c;越来越多的企业和个人开始使用网站来提供服务和信息。而SSL证书作为保障网站安全的重要工具&#xff0c;也逐渐被广泛应用。然而&#xff0c;对于许多企业和个人来说&#xff0c;购买和安装SSL证书是一项昂贵的任务。这就需要代理SSL证书的出现&am…

SLAM从入门到精通(camera数据读取)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 实际ros开发的时候&#xff0c;现场有很多特征都可以用来进行采集和标定。比如说地面&#xff0c;对于外资企业或者管理比较规范的企业来说&#x…

UNet及其变体在医学图像分割中的性能分析

论文链接&#xff1a;https://arxiv.org/abs/2309.13013 机构&#xff1a;英国伦敦布鲁内尔大学 日期&#xff1a;20230922 因为太长了长达37页所以我也就记点重点内容了hhh,我重点关注的还是在Unet以及其变体上&#xff0c;不过感觉严格意义上来说里面提到的方法不算很新&a…