antd 4.x, 实现Table 可编辑 , Table 结合Form.List,实现单独校验Form.List、Form.Item校验

2023-11-17

背景:

需要实现一个这种表格 在这里插入图片描述

思路:

1、编辑表格
	antd 有案例	
2、Form.List 嵌套Table 

实现

关键点: 单行校验怎么传参 ,单行如何获取值、 单行如何重置
注意: 我的form 是从外层传进来的 、这个没有影响 正常在 Form.List 外层加Form 组件包裹就行

import React from 'react'
import { Form, Input, Button, Table, Select, Upload,message } from 'antd'
// import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons'
import UploadFile from '../UploadFile/index'
import { GetCertificate,  SaveCertificate} from '@services/configure/configurationManagement'

const formItemLayout = {
    labelCol: {
        span: 3,
    },
    wrapperCol: {
        span: 24,
    },
} 

const TableEditForm = (props) => {
    // const [form] = Form.useForm()
    const { form} = props


// 单行校验 传参
    const validateForm =(record,field)=>{
        form.validateFields(
            [
                ['CertificateList',field.key,'pemName'],
                ['CertificateList',field.key,'keyName']
            ])
            .then(res=>{
                // 得到单行的数据
            })
            .catch(err=>{
                console.log(err,'dss')
            })
    }

 

    const getColumns = (add, remove) => {
        return [
            {
                title: '域名',
                dataIndex: 'domain',
                render(text, field, index) {
                    // 注意:这里的 field 不是当前行数据,而是 Form.List field
                    return <Form.Item
                        wrapperCol={ { span: 24 } }
                        shouldUpdate
                    >
                        {({ getFieldValue }) => {
                            // 获取当前行数据,然后渲染你要的数据
                            const record = (getFieldValue('CertificateList') || [])?.[index] || {}
                            return  record?.['domain']
                        }}
                    </Form.Item>
                }
            },
            {
                title: '证书(仅支持.pem格式)',
                dataIndex: 'pemName',
                render(text, field, index) {
                    return <Form.Item
                        wrapperCol={ { span: 24 } }
                        name={ [field.name, 'pemName'] }
                        rules={ [{ required: true, message: '请上传证书(仅支持.pem格式)' }] }
                    >
                        <UploadFile />
                    </Form.Item>
                }
            },
            {
                title: '证书秘钥(仅支持.key格式)',
                dataIndex: 'keyName',
                render(text, field, index) {
                    return <Form.Item
                        wrapperCol={ { span: 24 } }
                        shouldUpdate
                        name={ [field.name, 'keyName'] }
                        rules={ [{ required: true, message: '请上传证书秘钥(仅支持.key格式)' }] }
                        // valuePropName="fileList"
                        // getValueFromEvent={normFile}
                    >
                        <UploadFile />
                    </Form.Item>
                }
            },
            {
                title: '过期时间',
                dataIndex: 'expireTime',
                render(text, field, index) {
                    return <Form.Item
                        wrapperCol={ { span: 24 } }
                        shouldUpdate
                    >
                        {({ getFieldValue }) => {
                            const record = (getFieldValue('CertificateList') || [])?.[index] || {}
                            return  record?.['expireTime']
                        }}
                    </Form.Item>
                }
            },
            {
                title: '操作',
                dataIndex: 'operate',
                className: 'operate',
                width: 120,
                render(text, field, index) {
                    // 注意:这里的 field 不是当前行数据,而是 Form.List field
                    return <Form.Item
                        wrapperCol={ { span: 24 } }
                        shouldUpdate
                    >
                        {({ getFieldValue }) => {
                            // 获取当前行数据,然后渲染你要的数据
                            const record = (getFieldValue('CertificateList') || [])?.[index] || {}
                            return <div>
                                <a href="#" key={1} onClick={() => {
                                    form.resetFields(  [
                                        ['CertificateList',field.key,'pemName'],
                                        ['CertificateList',field.key,'keyName']
                                    ])
                                }}> 清空</a>
                                <a href='#' key={2} onClick={() => {
                                    validateForm(record,field)
                                }}> 保存</a>
                            </div>
                        }}
                    </Form.Item>
                }
            }
        ]
    }
 
    return (
        <>
            <Form.List name='CertificateList' {...formItemLayout}>
                { (fields, { add, remove }) => {
                    // 将Table视为 Form.List 中循环的 Form.Item
                    return (
                        <Table
                            dataSource={ fields }
                            columns={ getColumns(add, remove) }
                            rowKey='key'
                            pagination={false}
                        />
                    )
                }}
            </Form.List>
        </>
    )
}
 
export default TableEditForm```

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

antd 4.x, 实现Table 可编辑 , Table 结合Form.List,实现单独校验Form.List、Form.Item校验 的相关文章

  • 如何更改传单中功能集的样式?

    我正在看等值区域的例子 https leafletjs com examples choropleth https leafletjs com examples choropleth 这是他们使用的数据源 type Feature prop
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 如何使用 selenium 和 Mocha 获取 xPath() 选择的锚标记的文本

    我已经成功选择了 a 标签 我想显示锚标记的文本 但无法这样做 我正在使用 selenium mocha javascript 和 phantomJS 这是我的脚本 详细 var assert require assert var test
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 类型“typeof import("/home/kartik/Desktop/Ecommerce/ecommerce/node_modules/firebase/index")”上不存在属性“auth”。 TS(2339)

    我是 FireBase 的初学者 我正在尝试使用 Angular 通过 FireBase 实现 Google 登录 我在 auth 时收到上述错误 我特此附上login component ts和package json package l
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • Redux-saga 从操作中获取数据返回patternOrChannel 未定义

    我需要将动态数据从屏幕发送到操作 减速器 并使用该数据从 API 获取数据 但是当我在我的rootSaga我会收到这样的错误 在检查 take patternOrChannel 时未捕获 patternOrChannel 未定义未捕获在 r

随机推荐

  • java 垃圾回收 sys_深入理解Java虚拟机学习笔记2.1-G1垃圾回收

    G1 GC是Jdk7的新特性之一 Jdk7 版本都可以自主配置G1作为JVM GC选项 作为JVM GC算法的一次重大升级 DK7u后G1已相对稳定 且未来计划替代CMS 所以有必要深入了解下 不同于其他的分代回收算法 G1将堆空间划分成了
  • springmvc中的resolveView(视图解析器)

    视图解析器接口只有一个方法 就是根据名称解析出视图信息 一个视图对象View 采用的是模板模式 抽象模板类 AbstractCachingViewResolver 主要处理缓存 如果视图对象在缓存中有 则从缓存中取 如果没有则创建 publ
  • 整理最全的图床集合——三千图床

    2021 09 25 更新 去除部分图床 添加新的图床 优化排版 引言 古有弱水三千 今有三千图床 勿埋我心 图床一般是指储存图片的服务器 有国内和国外之分 国外的图床由于有空间距离等因素决定访问速度很慢影响图片显示速度 国内也分为单线空间
  • remote: HTTP Basic: Access deniedfatal: Authentication failed for ‘xxxxx‘的问题解决

    在没有修改git密码的情况下 使用vs code推送代码 总是会报错 remote HTTP Basic Access denied fatal Authentication failed for xxxxxxxx git仓库地址 网上试了
  • YOLOV7开源代码讲解--训练参数解释

    目录 训练参数说明 weights cfg data hpy epoch batch size img size rect resume nosave notest noautoanchor evolve bucket cach image
  • 【Basis】狄利克雷分布

    初次看狄利克雷分布 比较懵 主要是它有很多先行知识 所以我先介绍狄利克雷分布用到的多项式分布 gamma 函数 beta分布 然后再介绍狄利克雷分布 参考文献见文章末 目录 一 多项式分布 multinomial distribution
  • 仅仅是一张照片就是不能刷脸支付的

    科技改变未来并不是一句口号 就拿买东西来讲 以前人们都是一手交钱一手交货 拿到大额的纸币 还要验真假 而现在移动支付成为主要付款方式 只要一部手机 扫一扫就能付款 一开始也有很多人不习惯手机支付 因为觉得没有现金实在 整天就是一堆数字转来转
  • 解决TypeError: 'function' object is not subscriptable

    一 解决问题 在tensorflow中使用零矩阵初始化变量的时候出现的该异常 TypeError function object is not subscriptable 二 解决方法 问题代码如下 bias tf Variable tf
  • 深度学习(9):Inception危险物品检测

    目标 基于Inception网络实现对危险物品检测 将危险物品图片或视频经过图像预处理后输入模型推理 最后将检测结果进行可视化输出 一 原理 Google的Inception网络介绍 Inception为Google开源的CNN模型 至今已
  • Java的变量

    1 Java 变量类型 答 在Java语言中 所有的变量在使用前必须声明 声明变量的基本格式如下 type identifier value identifier value 格式说明 type为Java数据类型 identifier是变量
  • Java实现生成csv文件并导入数据

    一 需求 下载列表 在没有过滤之前下载列表所有数据 点击过滤之后 下载过滤之后对数据 生成csv文件 二 思路 先根据条件 是否过滤了数据 筛选出数据 将数据导入csv文件 生成文件并返回 三 代码实现 1 controller层 文件下载
  • Gbase 8s存储结构简介及空间管理

    Gbase 8s实例可以创建多个dbspace 一个dbspace可以包含多个物理chunk 一个chunk分成多个连续扩展区extent 一个表或者索引占用的空间被称为一个tablespace 一个extent包含多个物理页page 其中
  • 利用多线程来实现一个简单的服务器,来实现处理多个用户的请求

    服务器来实现接受多个客户的请求 并且处理响应 服务器采用了多线程 代码如下服务器 package cn kgc basic tcpthread import java io IOException import java net Serve
  • BERT从零详细解读:如何微调BERT,提升BERT在下游任务中的效果

    a 是句子对的分类任务 b 是单个句子的分类任务 c 是问答任务 d 是序列标注任务 首先我自己最常用的就是 文本分类 序列标注和文本匹配 这四个都是比较简单的 我们来看d 序列标注 其实就是把所有的token输出 做了一个softmax
  • Blender学习笔记(建模#3:点操作)

    建模 3 点操作 点操作 1 点的移动 2 点的滑移 3 点的合并 4 点的倒角 5 顶点连接 点操作 1 点的移动 当要将点在斜面上移动时 直接移动很难顺着斜面移动 这时可以使用法向坐标系 2 点的滑移 基本同线的滑移 3 点的合并 两点
  • AngularJs 的compile, preLink , postlink

    AngularJs 的compile preLink postlink 主要参考文章 1 http www jb51 net article 58229 htm 文章中对这三个概念做了详细的解析 如果你只写了一个link 那么系统会默认是p
  • Burp Suit+Phpstudy+Pikachu搭建Web安全练习环境

    1 软件安全测试工具Burp Suit安装 1 1 社区版 进入官网 Download Burp Suite Community Edition PortSwigger 进行下载安装即可 1 2 专业版 搜索Burp Suit2 0 11从
  • 链表相交等相关问题java - 左神算法基础课04 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天讲讲我至今碰到的最变态的链表题 问题 单链表两个单链表可能有环 可能无环 判断两个链表是否存在相交 如果有相交 返回其中一个交点 要求 时间复杂度 O m n 空
  • 【计算机网络】湖科大微课堂笔记 p36-37 集线器与交换机的区别、以太网交换机自学习和转发帧的流程

    集线器与交换机的区别 集线器 共享型以太网 交换机 交换式以太网 早期与集线器 使用集线器HUB在物理层拓展以太网 下面是三个独立的以太网 可以用集线器把它们互联形成更大的以太网 若一系中的某主机向二系中某主机发送数据帧 则此信号会传遍整个
  • antd 4.x, 实现Table 可编辑 , Table 结合Form.List,实现单独校验Form.List、Form.Item校验

    背景 需要实现一个这种表格 思路 1 编辑表格 antd 有案例 2 Form List 嵌套Table 实现 关键点 单行校验怎么传参 单行如何获取值 单行如何重置 注意 我的form 是从外层传进来的 这个没有影响 正常在 Form L