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

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.lryc.cn/news/238490.html

相关文章:

  • 【C++进阶之路】第八篇:智能指针
  • 保护服务器免受攻击:解析攻击情境与解决之道
  • Python 获取两个数组中各个坐标点对之间最短的欧氏距离
  • 假ArrayList导致的线上事故......
  • K8S精进之路-控制器Deployment-(1)
  • flutter iOS 视频mov格式转MP4格式
  • datafilecopy header validation failure for file +DATA/orcl/datafile/file1.ora
  • [机缘参悟-119] :一个IT人的反思:反者道之动;弱者,道之用 VS 恒者恒强,弱者恒弱的马太效应
  • CentOS用nginx搭建文件下载服务器
  • Ubuntu下载离线安装包
  • 【UE】线框材质
  • 物联网网关在工业行业的应用与优势
  • 【excel技巧】单元格内的公式如何隐藏?
  • 展开语法、剩余语法
  • MongoDB归并连续号段-(待验证)
  • 【每日一题】设计循环队列(C语言)
  • logic-flow 使用过程中遇到的bug - 拖动节点到画布的时候,鼠标松开,节点不落在画布,仍旧跟着鼠标走
  • el-tree结合el-switch实现状态切换
  • 汽车智能座舱/智能驾驶SOC -1
  • 2023 年爆肝将近 20 万字讲解最新 JavaEE 全栈工程师基础教程(更新中)
  • 目标检测YOLO实战应用案例100讲-基于改进YOLOv5s的道路目标检测(续)
  • Laravel/Lumen 任务调度简易入门说明
  • 目标检测 详解SSD原理,数据处理与复现
  • 智能座舱架构与芯片- (8) 视觉篇
  • uniapp、微信小程序返回上页面刷新数据
  • axios 请求合集
  • 浪潮信息云峦服务器操作系统KeyarchOS体验与实践
  • 将 Spring 微服务与 BI 工具集成:最佳实践
  • 负载均衡Ribbon和Feign的使用与区别
  • Python Opencv实践 - 二维码和条形码识别