前端-自定义Ant Design 表格(可编辑表格)

ops/2024/12/17 17:07:28/

选取的的是:表格 Table - Ant Design

其实ant design本身就有增加和删除单列数据的封装好的表格,但是个人觉得那个功能繁多,自己实现封装也便于之后理解和二次使用。

初步效果(舍去切换样式的功能):

突破的关键点就是在点击表格的每一行都是有对应的rowkey:

以此我们新增加入一行数据删减选中数据的功能

①将表格利用useState实现响应式:

    const [data,setData] = useState([

        {

            key: '1',

            name: 'John Brown',

            age: 32,

            address: 'New York No. 1 Lake Park',

        },

    ]);

②添加增加和删减按钮:

③新增实现代码:

新增代码

    let [count,setCount]=useState(2)//每一行都有独立的的key

    const adddata=()=>{

        const newrowdata={

            key:count,

            name: 'newname',

            age: 42,

            address: 'newaddress',

        }

        //利用扩展运算符将新增数据拷贝到原数据实现新增

        setData([...data,newrowdata])

        setCount(count+1)

    }

实现新增功能:

④删除选中行实现代码: 

我们需要利用已经定义好的rowSelection收集选中行的key

    let [selecteddatarowkeys,setSelecteddatarowkeys]=useState([])

    const rowSelection = {

        onChange: (selectedRowKeys, selectedRows) => {

            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);

            setSelecteddatarowkeys(selectedRowKeys)

        },

        getCheckboxProps: (record) => ({

            //设置禁用行,我们默认为第一行

            disabled: record.key === '1',

        }),

    };

    console.log('收集的选中行:'+selecteddatarowkeys)

那么就可以实现功能就很方便了:

    const deletedata=()=>{

        //去除data当中包含选中行的rowkeys

        const newdate=data.filter(item=>!selecteddatarowkeys.includes(item.key))

        setData(newdate)

    }

⑤附上全部代码:

javascript">import React, { useState } from 'react';
import { Table ,Button} from 'antd';
import { PlusOutlined, MinusOutlined } from '@ant-design/icons';
const App = () => {//就是相当于每列的索引const columns = [{title: 'Name',dataIndex: 'name',render: (text) => <a>{text}</a>,},{title: 'Age',dataIndex: 'age',},{title: 'Address',dataIndex: 'address',},];//每列的数据const [data,setData] = useState([{key: '1',name: 'John Brown',age: 32,address: 'New York No. 1 Lake Park',},]);let [selecteddatarowkeys,setSelecteddatarowkeys]=useState([])const rowSelection = {onChange: (selectedRowKeys, selectedRows) => {console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);setSelecteddatarowkeys(selectedRowKeys)},getCheckboxProps: (record) => ({//设置禁用行,我们默认为第一行disabled: record.key === '1',}),};console.log('收集的选中行:'+selecteddatarowkeys)let [count,setCount]=useState(2)const adddata=()=>{const newrowdata={key:count,name: 'newname',age: 42,address: 'newaddress',}//利用扩展运算符将新增数据拷贝到原数据实现新增setData([...data,newrowdata])setCount(count+1)}const deletedata=()=>{//去除data当中包含选中行的rowkeysconst newdate=data.filter(item=>!selecteddatarowkeys.includes(item.key))setData(newdate)}return (<div style={{ display: 'flex' ,flexDirection:'column'}}><div className="operatedata" style={{margin:'20px'}}><Button type="primary" icon={<PlusOutlined />} onClick={adddata} style={{margin:'0 10px'}}>新增</Button><Button type="primary" icon={<MinusOutlined />} onClick={deletedata}>删减</Button></div><TablerowSelection={{...rowSelection,}}columns={columns}dataSource={data}/></div>);
};
export default App;


http://www.ppmy.cn/ops/142694.html

相关文章

RabbitMQ:windows系统安装

一、安装erlang 1、我i们先安装erlangOtp 25.3.2.16 - Erlang/OTP 2、安装右键&#xff0c;选择以管理员身份运 点击next; 3、配置环境变量 4、验证是否安装成功 直接 win cmd 命令&#xff1a;erl 出现以下版本号则配置成功 二、安装RabbitMQ 1、官网下载RabbitMQ 在Inst…

JWT 令牌:原理、应用与安全考量

深入理解 JWT 令牌&#xff1a;原理、应用与安全考量 文章目录 深入理解 JWT 令牌&#xff1a;原理、应用与安全考量一、引言二、JWT 令牌与传统方式的区别&#xff08;一&#xff09;传统身份验证方式的特点与局限&#xff08;二&#xff09;JWT 令牌的优势 三、JWT 令牌的字段…

相机不动,机构动作----Hands Eyes

最近在研究 手眼标定&#xff0c;发现大家都需付费&#xff0c;搞啥子&#xff0c;说好的开源。。。 以相机在上固定不动&#xff0c;机械手为 EPSON_Robot 为例&#xff0c;详细的一步一步实例操作指引 EPSON_Robot 的192.168.0.1 2004 Server 详细操作步骤 1. 启动程序 运…

使用Opencv对监控相机进行内参标定记录

使用Opencv对监控相机进行标定记录 一、前言 由于相机存在径向畸变和切向畸变&#xff0c;导致相机中一些图像细节产生畸变。需要进行内参矫正。 二、C代码 新建三个文件&#xff0c;main.cpp,Calibration.cpp和Calibration.h 1.代码main.cpp #include <string> #i…

NPM国内镜像源多选择与镜像快速切换工具(nrm)介绍

多镜像源选择 淘宝镜像&#xff08;推荐&#xff09; 镜像地址&#xff1a;https://registry.npmmirror.com 特性&#xff1a;官方推荐&#xff0c;镜像更新速度快&#xff0c;稳定性高。 使用方式&#xff1a; npm config set registry https://registry.npmmirror.com恢复…

css实现渐变色圆角边框

css实现渐变色圆角边框 渐变色圆角边框(内容区域圆角)渐变色圆角边框(内容区域直角) 渐变色圆角边框(内容区域圆角) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>渐变色圆角边框(内容区域圆角)<…

Gitee与idea的项目提交步骤

1. 准备工作 确保你已经安装了Git&#xff0c;并且你的计算机上已经配置了Git。如果你还没有安装Git&#xff0c;可以从Git官网下载并安装。 2. 创建Gitee账户和仓库 访问Gitee官网并注册一个账户&#xff08;如果你还没有的话&#xff09;。登录你的Gitee账户。点击右上角的…

10 windows安装部署mysql

1.下载mysql 官网&#xff1a;https://downloads.mysql.com/archives/installer/ 2.安装 &#xff08;1&#xff09;解压压缩包&#xff0c;以管理员权限打开cmd # 初始化mysql mysqld --initialize --console注意记住密码 &#xff08;2&#xff09;将mysql安装为windows的…