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

antd 库的 Table 组件中删除一个或多个选中的列表

在这里插入图片描述

先解释一下原代码每个方法的含义


const TablePage: React.FC = () => {/* selectedRowKeys	指定选中项的 key 数组,需要和 onChange 进行配合在此处,通过 rowSelection.selectedRowKeys 来控制选中项。*/const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);// loading 页面是否加载中const [loading, setLoading] = useState(false);// 点击了清空const start = () => {setLoading(true);// ajax request after empty completingsetTimeout(() => {setSelectedRowKeys([]);setLoading(false);}, 1000);};// onSelectChange 触发了选择改变const onSelectChange = (newSelectedRowKeys: React.Key[]) => {console.log("selectedRowKeys changed: ", newSelectedRowKeys);setSelectedRowKeys(newSelectedRowKeys);};// 开启可选则按钮const rowSelection = {selectedRowKeys,onChange: onSelectChange,};//禁用const hasSelected = selectedRowKeys.length > 0;// 删除const deleteList = () => {console.log(selectedRowKeys);const dataVale = data.filter((item) => !selectedRowKeys.includes(item.key));console.log(dataVale);};return (<div><div style={{ marginBottom: 16 }}><Buttontype="primary"onClick={start}disabled={!hasSelected}loading={loading}>清空</Button>{" "}&nbsp;<Button onClick={deleteList}>删除</Button><span style={{ marginLeft: 8 }}>{hasSelected ? `你选择了 ${selectedRowKeys.length}` : ""}</span></div>{/* rowSelection :表格行是否可选择,配置项columns	表格列的配置描述dataSource	数据数组*/}<Table rowSelection={rowSelection} columns={columns} dataSource={data} /></div>);
};

修改后的数据,重新定义了 data

  const [data, setData] = useState([{ key: "t", name: "唐诗", age: 18, address: "唐朝" },{ key: "s", name: "宋词", age: 18, address: "宋朝" },{ key: "y", name: "元曲", age: 18, address: "元朝" },{ key: "m", name: "明文", age: 18, address: "明朝" },{ key: "q", name: "清小说", age: 18, address: "清朝" },]);

添加删除按钮

在原有的 选择和操作 用法上先添加一个删除按钮

 <Button onClick={deleteList}>删除</Button>

删除按钮的方法

  // 删除const deleteList = () => {console.log(selectedRowKeys);const dataVale = data.filter((item) => !selectedRowKeys.includes(item.key));setData(dataVale);console.log(dataVale);};

解析一下这行代码:

data.filter((item) => !selectedRowKeys.includes(item.key));

代码使用了filterincludes两种数组方法来创建新的newData数组。

首先,来分析一下这行代码的整体逻辑:

  1. filter方法用于遍历原始的data数组,并根据指定条件对数组元素进行筛选。
  2. 在每次遍历数组元素时,通过!selectedRowKeys.includes(item.key)来判断该元素的key属性是否存在于selectedRowKeys数组中。
  3. 如果item.keyselectedRowKeys数组中不存在(即includes返回false),则该元素会被保留在newData数组中。
  4. 最后,newData数组会包含筛选后的结果,即不包含选中行的新的数据数组。

分别解释一下filterincludes的作用:

  1. filter方法是一个高阶函数,接受一个回调函数作为参数。回调函数会遍历数组中的每个元素,并根据返回值来决定是否保留该元素。若返回值为true,则保留该元素;若返回值为false,则舍弃该元素。
  2. includes方法用于判断数组是否包含某个指定元素。它接受一个参数作为要搜索的元素,并返回一个布尔值。如果指定的元素存在于数组中,返回true;反之,返回false

因此,const newData = data.filter(item => !selectedRowKeys.includes(item.key)); 这行代码的作用是从data数组中过滤出那些item.keyselectedRowKeys数组中不存在的元素,然后赋值给newData数组,实现了删除选中行的效果。

完整代码:

import React, { useState } from "react";
import { Button, Table } from "antd";
import type { ColumnsType } from "antd/es/table";interface DataType {key: React.Key;name: string;age: number;address: string;
}const columns: ColumnsType<DataType> = [{title: "Name",dataIndex: "name",},{title: "Age",dataIndex: "age",},{title: "Address",dataIndex: "address",},{title: "Controls",dataIndex: "Controls",render: () => <Button>显示</Button>,},
];// for (let i = 6; i < 46; i++) {
//   data.push({
//     key: i,
//     name: `Edward King ${i}`,
//     age: 32,
//     address: `London, Park Lane no. ${i}`,
//   });
// }const TablePage: React.FC = () => {/* selectedRowKeys	指定选中项的 key 数组,需要和 onChange 进行配合在此处,通过 rowSelection.selectedRowKeys 来控制选中项。*/const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);// loading 页面是否加载中const [loading, setLoading] = useState(false);const [data, setData] = useState([{ key: "t", name: "唐诗", age: 18, address: "唐朝" },{ key: "s", name: "宋词", age: 18, address: "宋朝" },{ key: "y", name: "元曲", age: 18, address: "元朝" },{ key: "m", name: "明文", age: 18, address: "明朝" },{ key: "q", name: "清小说", age: 18, address: "清朝" },]);// 点击了清空const start = () => {setLoading(true);// ajax request after empty completingsetTimeout(() => {setSelectedRowKeys([]);setLoading(false);}, 1000);};// onSelectChange 触发了选择改变const onSelectChange = (newSelectedRowKeys: React.Key[]) => {console.log("selectedRowKeys changed: ", newSelectedRowKeys);setSelectedRowKeys(newSelectedRowKeys);};// 开启可选则按钮const rowSelection = {selectedRowKeys,onChange: onSelectChange,};//禁用const hasSelected = selectedRowKeys.length > 0;// 删除const deleteList = () => {console.log(selectedRowKeys);const dataVale = data.filter((item) => !selectedRowKeys.includes(item.key));setData(dataVale);console.log(dataVale);};return (<div><div style={{ marginBottom: 16 }}><Buttontype="primary"onClick={start}disabled={!hasSelected}loading={loading}>清空</Button>{" "}&nbsp;<Button onClick={deleteList}>删除</Button><span style={{ marginLeft: 8 }}>{hasSelected ? `你选择了 ${selectedRowKeys.length}` : ""}</span></div>{/* rowSelection :表格行是否可选择,配置项columns	表格列的配置描述dataSource	数据数组*/}<Table rowSelection={rowSelection} columns={columns} dataSource={data} /></div>);
};export default TablePage;

相关文章:

antd 库的 Table 组件中删除一个或多个选中的列表

先解释一下原代码每个方法的含义 const TablePage: React.FC () > {/* selectedRowKeys 指定选中项的 key 数组&#xff0c;需要和 onChange 进行配合在此处&#xff0c;通过 rowSelection.selectedRowKeys 来控制选中项。*/const [selectedRowKeys, setSelectedRowKeys] …...

针对java程序员的了解细节操作系统与进程

一、&#x1f49b; 操作系统&#xff08;浅浅概念&#xff09;&#xff1a;是用来搞管理软件的 1.对下,要管理各种硬件设备 2.对上,要给应用程序提供一个稳定的运行环境 二、&#x1f499; 进程&#xff1a;正在运行的程序&#xff0c;假如程序没有运行就不叫程序&#xff0c;…...

判定是否互为字符重排、回文排列

题1&#xff1a;判定是否互为字符重排 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 输入: s1 "abc", s2 "bca" 输出: true 输入: s1 &quo…...

QT QTextCharFormat 说明和使用

QTextCharFormat&#xff1a;设置文本编辑框字体&#xff0c;字号&#xff0c;加粗&#xff0c;倾斜&#xff0c;下划线&#xff0c;颜色 QTextCharFormat 类的一些常用属性和方法&#xff1a; setFont(const QFont &font): 设置字体。 setFontFamily(const QString &a…...

掌握Memory Profiler技巧:识别内存问题

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、如何使用四、页面说明4.1 Java 和 Kotlin 分配…...

Linux学习之正则表达式元字符和grep命令

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)&#xff0c;uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64。 正则表达式是一种搜索字符串的模式&#xff0c;通俗点理解&#xff0c;也就是普通字符和元字符共同组成的字符集合匹…...

熟练掌握ChatGPT解决复杂问题——学会提问

目录 引言 一、5W1H分析法 1. 简单的问题&#xff08;what、where、when、who&#xff09; 2.复杂的问题&#xff08;why、how&#xff09; 2.1 为什么&#xff08;Why&#xff09;——原因 2.2 方式 &#xff08;How&#xff09;——如何 二、如何提问得到更高质量的答案…...

JVM之类加载与字节码

1.类文件结构 一个简单的HelloWorld.Java package cn.itcast.jvm.t5; // HelloWorld 示例 public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } }编译为 HelloWorld.class 后的样子如下所示&#xff1a; […...

【博客688】如何实现keepalived vip监控与告警

如何实现keepalived vip监控与告警 1、使用的exporter https://github.com/mehdy/keepalived-exporter2、metrics里的状态的具体含义 注意&#xff1a;存状态的字符串的每个状态的值其实是跟状态在数组中的索引相对应的 具体参考这里&#xff1a; https://github.com/mehdy…...

[QT编程系列-39]:用户界面UI - 样式表QSS与样式文件快速入门

目录 1. 概述 2. CSS 3. QSS示例 4. QT样式表文件使用方法与步骤 5. QT内置样式 6. QT常见基本样式 1. 概述 Qt提供了一种称为Qt样式表&#xff08;Qt Style Sheets&#xff09;的机制&#xff0c;可以用于自定义和美化Qt应用程序的用户界面&#xff08;UI&#xff09;。…...

机器学习和深度学习简述

一、人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热&#xff0c;但很多从业者却很难说清它们之间的关系&#xff0c;外行人更是雾里看花。概括来说&#xff0c;人工智能、机器学习和深度学习覆盖的技术范畴是逐层递减的&#xff0c;三…...

diffusion model2 扩散模型的文本信息融合、交叉注意力机制、lora

前言 在上一篇文章中&#xff0c;我们剖析了diffusion model的原理&#xff0c;而在这一篇文章中&#xff0c;我们探讨与扩散模型有关的其他话题&#xff0c;包括扩散模型的unet是如何在推理噪声的过程中&#xff0c;融入文本信息的考量&#xff1f;其原理为交叉注意力机制&am…...

数据结构——二叉树

本章代码仓库&#xff1a;堆、二叉树链式结构 文章目录 &#x1f36d;1. 树&#x1f9c1;1.1 树的概念&#x1f9c1;1.2 树的结构 &#x1f36c;2. 二叉树&#x1f36b;2.1 二叉树的概念&#x1f36b;2.2 特殊的二叉树&#x1f36b;2.3 二叉树的性质&#x1f36b;2.4 二叉树的存…...

架构训练营学习笔记:5-3接口高可用

序 架构决定系统质量上限&#xff0c;代码决定系统质量下限&#xff0c;本节课串一下常见应对措施的框架&#xff0c;细节不太多&#xff0c;侧重对于技术本质有深入了解。 接口高可用整体框架 雪崩效应&#xff1a;请求量超过系统处理能力后导致系统性能螺旋快速下降 链式…...

【笔记】湖仓一体架构演进与发展

https://www.bilibili.com/video/BV1oF411F7rQ/?spm_id_from333.788.recommend_more_video.0&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf...

政务云建设与应用解决方案[42页PPT]

导读&#xff1a;原文《政务云建设与应用解决方案[42页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完…...

20天突破英语四级高频词汇——第①天

2&#xfeff;0天突破英语四级高频词汇~第一天加油(ง •_•)ง&#x1f4aa; &#x1f433;博主&#xff1a;命运之光 &#x1f308;专栏&#xff1a;英语四级高频词汇速记 &#x1f30c;博主的其他文章&#xff1a;点击进入博主的主页 目录 2&#xfeff;0天突破英语四级…...

【网络基础实战之路】基于MGRE多点协议的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…...

K8s实战入门(三)

文章目录 3. 实战入门3.1 Namespace3.1.1 测试两个不同的名称空间之间的 Pod 是否连通性 3.2 Pod3.3 Label3.4 Deployment3.5 Service 3. 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 3.1 Namespace Namespace是kuber…...

Linux-centos花生壳实现内网穿透

Linux-centos花生壳实现内网穿透 官网教程 1.安装花生壳 下载网址 点击复制就可以复制下载命令了 wget "https://dl.oray.com/hsk/linux/phddns_5.2.0_amd64.rpm" -O phddns_5.2.0_amd64.rpm# 下载完成之后会多一个rpm文件 [rootlocalhost HuaSheng]# ls phddns_…...

markdown基础语法及效果演示

[toc] 自动生成目录 文章目录标题二级标题# 标题 一级标题 标题 - 无序列表 无序列表无序列表 # 二级标题 二级标题 代码块&#xff1a; python print(“hello world!”) #代码块 print("hello world!") #代码块>引用 引用 >>二级引用 二级引用 - […...

tealdeer与其他tldr客户端的终极对比分析:哪个更适合你的命令行工作流?

tealdeer与其他tldr客户端的终极对比分析&#xff1a;哪个更适合你的命令行工作流&#xff1f; 【免费下载链接】tealdeer A very fast implementation of tldr in Rust. 项目地址: https://gitcode.com/gh_mirrors/te/tealdeer tealdeer是一款用Rust开发的tldr客户端&a…...

【深度长文】一篇讲清 Kubernetes 控制平面架构,四个组件如何协同

引言 很多人第一次接触 Kubernetes&#xff0c;记住的是一串组件名称&#xff1a;API Server、etcd、Scheduler、Controller Manager、kubelet。再往后一些&#xff0c;会知道 Deployment 管副本&#xff0c;Scheduler 管调度&#xff0c;Operator 能做自动化运维。但如果继续…...

SpringBoot+Vue 学科竞赛管理管理平台源码【适合毕设/课设/学习】Java+MySQL

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着教育信息化的快速发展&#xff0c;学科竞赛作为培养学生创新能力和实践能力的重要途径&#xff0c;其管理效率的提升成为高校关注的焦点。传统…...

AI辅助开发:描述需求即可自动生成流程图,比手动visio下载更智能

最近在做一个用户系统的设计&#xff0c;需要画登录注册的流程图。以前用Visio这类工具时&#xff0c;经常要手动拖拽各种图形、调整连线&#xff0c;特别费时间。这次尝试了用AI辅助生成&#xff0c;发现效率提升太多了&#xff01; 需求解析环节 我把需求描述成一段自然语言&…...

【通信】基于UCB的多智能体多臂老虎机算法降低 OBSS 干扰、提升系统吞吐量与公平性附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

OpenClaw+千问3.5-35B-A3B-FP8:个人健康数据分析助手

OpenClaw千问3.5-35B-A3B-FP8&#xff1a;个人健康数据分析助手 1. 为什么需要个人健康数据分析助手 去年体检后&#xff0c;我面对几十页的检测报告和智能手环积累的三个月运动数据&#xff0c;突然意识到一个尴尬的事实&#xff1a;这些数据躺在不同平台里&#xff0c;既不…...

Vin象棋:基于Yolov5的中国象棋智能视觉辅助系统,重新定义数字化对弈体验

Vin象棋&#xff1a;基于Yolov5的中国象棋智能视觉辅助系统&#xff0c;重新定义数字化对弈体验 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在数字化对…...

别再对着文档发愁了!手把手教你读懂并配置StrongSwan的ipsec.conf文件

从零到精通&#xff1a;StrongSwan的ipsec.conf实战配置指南 第一次打开ipsec.conf文件时&#xff0c;那些密密麻麻的参数确实让人望而生畏。作为一款功能强大的IPsec实现&#xff0c;StrongSwan的配置文件看似复杂&#xff0c;实则遵循着清晰的逻辑结构。本文将带你从实际应用…...

OpenClaw技能扩展实战:用Qwen3-32B镜像自动处理Markdown文档

OpenClaw技能扩展实战&#xff1a;用Qwen3-32B镜像自动处理Markdown文档 1. 为什么需要文档自动化处理 作为一个长期与Markdown文档打交道的技术写作者&#xff0c;我经常遇到这样的困扰&#xff1a;当积累了几百篇笔记后&#xff0c;突然发现文件命名不规范需要批量修改&…...