React结合antd5实现整个表格编辑

通过react hooks 结合antd的table实现整个表格新增编辑。
在这里插入图片描述

引入组件依赖

import React, { useState } from 'react';
import { Table, InputNumber, Button, Space, Input } from 'antd';

定义数据

const originData = [{ key: 1, name: '白银会员', value: 0, equity: 0, reward: 0 },{ key: 2, name: '黄金会员', value: 500, equity: 2, reward: 1 },{ key: 3, name: '钻石会员', value: 1000, equity: 4, reward: 1 },{ key: 4, name: '至尊会员', value: 1500, equity: 1, reward: 0 },
];

编辑表格时触发(函数体外)

const EditableCell = ({dataIndex,rowIndex,title,record,index,children,isEdit,data,handChange,...restProps
}) => {return (<td {...restProps}>{isEdit ? (// 这里可以自定义需要的类型进行处理<Input defaultValue={data[rowIndex][dataIndex]} onChange={(e) => handChange(e.target.value, rowIndex, dataIndex)} />) : (children)}</td>);
};

定义函数体

export default function GradeSet() {//旧数据const [data, setdata] = useState(originData);//是否编辑const [isEdit, setisEdit] = useState(false);//新数据const [temData, settemData] = useState(originData);const columns = [{title: '等级名称',dataIndex: 'name',editable: true,},{title: '升级条件',dataIndex: 'value',editable: true,},{title: '等级权益',dataIndex: 'equity',editable: true,},{title: '升级奖励',dataIndex: 'reward',editable: true,},]const mergedColumns = columns.map(col => {if (!col.editable) {return col;}return {...col,onCell: (record, rowIndex) => ({record,rowIndex,dataIndex: col.dataIndex,title: col.title,isEdit: isEdit,data: temData,handChange}),};});//取消const handleCancel = () => {settemData(data)setisEdit(false)}//保存const handleSave = () => {setdata(temData);setisEdit(false);}//改变时const handChange = (value, rowIndex, dataIndex) => {const otherData = JSON.parse(JSON.stringify(temData));otherData[rowIndex][dataIndex] = value;settemData(otherData)}// 添加const handleAdd = () => {const newData = [...temData];newData.push({ key: temData.length + 1, name: `${temData.length + 1} 会员`, value: 0, equity: 0, reward: 0 },)console.log(newData)settemData(newData);}// 删除const handleDelete = () => {const newData = [...temData];newData.pop();settemData(newData);}return (<div><div className={`headTitle`}><p>数据列表</p>{isEdit ?<Space><Button onClick={() => handleCancel()}>取消</Button><Button type="primary" onClick={() => handleSave()}>保存</Button></Space>:<Button onClick={() => setisEdit(true)}>编辑</Button>}</div><Tablecomponents={{ body: { cell: EditableCell } }}bordereddataSource={temData}columns={mergedColumns}rowClassName="editable-row"pagination={false}/>{isEdit ?<Space className={s.bottom}><Button type="primary" onClick={() => handleAdd()}>添加等级</Button><Button danger onClick={() => handleDelete()}>删除最高等级</Button><p>修改等级获得条件的成长值后,部分客户会因无法达到该成长值要求而发生会员等级的变化</p></Space>:null}</div>);
}

样式

.headTitle {padding: 0 16px;display: flex;justify-content: space-between;align-items: center;color: #666;height: 50px;line-height: 50px;background: #f0f0f0;
}

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

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

相关文章

头歌 MySQL数据库 - 初识MySQL

本章内容是为了完成老师布置的作业&#xff0c;同时也是为了以后考试的时候方便复习。 数据库部分一条一条的写&#xff0c;可鼠标手动粘贴&#xff0c;除特定命令外未分大小写。 第1关&#xff1a;创建数据库 在操作数据库之前&#xff0c;需要连接它&#xff0c;输入命令&a…

怎么让NetCore接口支持Json参数

项目&#xff1a;NetCore Web API 接口支持Json参数需要安装Newtonsoft.Json.Linq和Microsoft.AspNetCore.Mvc.NewtonsoftJson Program代码 //支持json需要安装Microsoft.AspNetCore.Mvc.NewtonsoftJson using Newtonsoft.Json.Serialization;var builder WebApplication.Cr…

【C/PTA】函数专项练习(一)

本文结合PTA专项练习带领读者掌握函数&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 输出星期名6-2 三整数最大值6-3 数据排序6-4 多项式求值 6-1 输出星期名 请编写函数&#xff0c;根据星期数输出对应的星期名。 函数原…

【LeetCode刷题】--12.整数转罗马数字

12.整数转罗马数字 方法&#xff1a;模拟 分析罗马数字的规则是&#xff1a;对于罗马数字从左到右的每一位&#xff0c;选择尽可能大的符号值 根据罗马数字的唯一表示法&#xff0c;为了表示一个给定的整数num&#xff0c;寻找不超过num的最大符号值&#xff0c;将num减去该符…

CyNix

CyNix 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.146 arp-scan -l端口扫描&#xff0c;只开放了80和6688端口 nmap -A -p- -sV 192.168.80.146二、信息收集 访问80端口 路径扫描 gobuster dir -u http://192.168.80.146/ -w /usr/share/wordlists/dir…

C++之内建函数对象

C之内建函数对象 算术仿函数 #include<iostream> using namespace std; #include<functional>//内建函数对象头文件 //内建函数对象 算术仿函数void test() {// negate 一元仿函数 取反仿函数negate<int>n;cout << n(100) << endl;//plus 二元仿…

软件测试/人工智能丨互联网大厂内的人工智能测试

互联网公司在人工智能&#xff08;AI&#xff09;测试方面一直处于不断发展和演变的状态。互联网公司人工智能测试目前趋势&#xff1a; 自动化测试的重要性增加&#xff1a; 随着人工智能应用的不断增多&#xff0c;互联网公司越来越意识到自动化测试的重要性。自动化测试框架…

可用于短期风速预测及光伏预测的LSTM/ELM预测程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序内容&#xff1a; 该程序是预测类的基础性代码&#xff0c;程序对河北某地区的气象数据进行详细统计&#xff0c;程序最终得到pm2.5的预测结果&#xff0c;通过更改数据很容易得到风速预测结果。程序主要…

高精度人像背景分割SDK技术解决方案

图像处理技术已经成为企业和个人生活中不可或缺的一部分&#xff0c;特别是在人像处理方面&#xff0c;如何准确、高效地将人物与背景分离&#xff0c;一直是一个技术难题。然而&#xff0c;美摄科技凭借其在AI深度学习领域的深厚积累&#xff0c;推出了一款高精度的人像背景分…

报错:HikariPool-1 - Exception during pool initialization.

问题发现&#xff1a; 原本可以运行的springboot2项目突然无法运行且报错&#xff0c;HikariPool-1 - Exception during pool initialization。 问题分析&#xff1a; 观察报错信息发现是JDBC连接失败&#xff0c;进而搜索HikariPool-1&#xff0c;搜索得知应该是applicatio…

01-论文阅读-Deep learning for anomaly detection in log data: a survey

01-论文阅读-Deep learning for anomaly detection in log data: a survey 文章目录 01-论文阅读-Deep learning for anomaly detection in log data: a survey摘要I 介绍II 背景A 初步定义B 挑战 III 调查方法A 搜索策略B 审查的功能 IV 调查结果A 文献计量学B 深度学习技术C …

Springboot+vue的社区医院管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的社区医院管理系统(有报告)&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的应急物资管理系统&#xff0c;采用M&#xff08;model&#xff09;V&am…

el-form动态表单动态验证(先验证不为空,再验证长度在20以内,最后向后台发送请求验证账号是否重复)

data(){var checkSno (rule, value, callback) > {if (!value) {callback(new Error("请输入账号"));} else if (value.length > 20) {callback(new Error("长度为1-20"));} else {if (this.form.id) {// 修改时检查账号是否重复selectLoginId({ sn…

美国国家安全实验室员工详细数据在网上泄露

一个从事出于政治动机的攻击的网络犯罪组织破坏了爱达荷国家实验室&#xff08;INL&#xff09;的人力资源应用程序&#xff0c;该组织周日在电报上发帖称&#xff0c;已获得该核研究实验室员工的详细信息。 黑客组织 SiegedSec 表示&#xff0c;它已经访问了“数十万用户、员…

JMeter —— 接口自动化测试(数据驱动)

前言 之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存…

IP地址定位是如何实现的?

IP定位的实现是通过查找IP地址对应的地理位置信息来实现的。具体来说&#xff0c;IP定位是通过查询IP地址对应的地理位置数据库来获取地理位置信息。这个数据库可以是公共的或者私有的&#xff0c;其中包含了IP地址和地理位置信息之间的映射关系。 在实际操作中&#xff0c;IP定…

C++初级项目-webserver(1)

1.引言 Web服务器是一个基于Linux的简单的服务器程序&#xff0c;其主要功能是接收HTTP请求并发送HTTP响应&#xff0c;从而使客户端能够访问网站上的内容。本项目旨在使用C语言&#xff0c;基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接…

力扣 622.设计循环队列

目录 1.解题思路2.代码实现 1.解题思路 首先&#xff0c;该题是设计循环队列&#xff0c;因此我们有两种实现方法&#xff0c;即数组和链表&#xff0c;但具体考虑后&#xff0c;发现数组实现要更容易一些&#xff0c;因此使用数组实现&#xff0c;因此我们要给出头和尾变量&a…

Python (十二) 文件

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

【STM32】TF卡FTA32文件系统

一、SD卡介绍 1.SD简介 本质&#xff1a;NandFlash控制芯片 2.SD卡存储容量等级 3.FAT文件系统的使用 4.SD卡速度等级 5.SD卡驱动方式 1.SDIO&&SD 1&#xff09;SDIO接口通信线&#xff1a;CLK/CMD/DAT0-3&#xff08;数据传输线4根&#xff09; 2&#xff09;SPI接口…