react经验8:使用antd的checkbox实现全选与半选控制

预期实现的效果
在这里插入图片描述
列表项部分选中时,checkall处于半选状态,点击checkall要么全选,要么全不选。

实现步骤

列表项类型

declare type TableRow = {key: Keytitle: stringisSelected?: boolean
}

示范数据

const [tabledata, setTabledata] = useState<TableRow[]>([])
useEffect(()=>{setTabledata([{key:1,title:'Apple'},{key:2,title:'Pear'},{key:3,title:'Orange'}])
},[])

核心控制函数

//半选状态
const halfChecked = useMemo(() => {if (!tabledata.length) {return false}let checkeds = tabledata.filter(d => d.isSelected).lengthreturn checkeds > 0 && checkeds < tabledata.length}, [tabledata])
//全选状态
const allChecked = useMemo(() => {if (!tabledata.length) {return false}return tabledata.every(d => d.isSelected)
}, [tabledata])
//全选控制,点一下全选或全不选
function handleCheckAll(e: CheckboxChangeEvent) {if (e.target.checked) {tabledata.forEach(d => d.isSelected = true)} else {tabledata.forEach(d => d.isSelected = false)}setTabledata([...tabledata])
}
//列表项选中改变事件
function handleItemSelect(item:TableRow){item.isSelected =!item.isSelected setTabledata([...tabledata])
}  

视图部分

<Checkbox indeterminate={halfChecked} checked={allChecked} onChange={handleCheckAll}>Check All</Checkbox>
<ul>
{tabledata.map(row=>(<li key={row.key}><Checkbox checked={row.isSelected} onChange={()=>handleItemSelect(row)}>{row.title}</Checkbox></li>))
}
</ul>

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

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

相关文章

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次&#xff0c;使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层&#xff08;TCP UDP&#xff09;->TCP&#xff08; 面向连接&am…

流程控制之条件判断

目录 流程控制之条件判断 2.1.if语句语法 2.1.1单分支结构 2.1.2双分支结构 2.1.3多分支结构 2.2.案例 例一: 例2: 例3: 例4: 例5: 例6: 例7: 例8: 例9: 2.3.case多条件判断 2.3.1.格式 2.3.2.执行过程 例10: 流程控制之条件判断 2.1.if语句语法 2.1.1单分…

Linux ed命令教程:如何使用ed命令编辑文本文件(附案例详解和注意事项)

Linux ed命令介绍 ed命令是Linux中的一个简单文本编辑器。它是一种基于行的文本编辑器&#xff0c;用于创建、修改和操作文本文件。它是Unix中最早的编辑器&#xff0c;后来被vi和emacs文本编辑器所取代。 Linux ed命令适用的Linux版本 ed命令在大多数Linux发行版中都可以使…

【Docker五】使用Harbor搭建Docker私有仓库

目录 一、harbor概述 1、harbor概念&#xff1a; 2、harbor的特性 3、harbor的组件&#xff1a; 二、harbor实验&#xff1a; 1、搭建harbor 2、远程主机使用docker-harbor&#xff1a; 3、镜像同步&#xff1a; 一、harbor概述 1、harbor概念&#xff1a; harbor&…

C_11练习题答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述中正确的是(C)A.C语言不是一种高级语言 B.C语言不用编译就能被计算机执行 C.C语言能够直接访问物理地址和进行位…

layui框架国际化的实现

项目场景&#xff1a; 要对一个前端使用layui的项目进行国际化&#xff0c;但是layui好像没有实现国际化&#xff0c;所以需要自己手动实现。 软件版本&#xff1a; layui版本&#xff1a;layui-v2.5.6 jquery版本&#xff1a;3.5.1.min 解决方案&#xff1a; 需要国际化的…

ES日志分析在Win系统上的安装和使用

Es日志分析三件套ElasticSearch、Kibana、logstash。 ElasticSearch 下载 官方下载地址 选择自己想要的版本下载即可。这个地方有可能下载会比较慢。可以结合迅雷做下载。 分词器下载 官方分词器下载 如果GIthub加载不出来。可以看看我的这个文章GitHub上不去怎么办&…

【C++练级之路】【Lv.4】类和对象(下)(初始化列表,友元,static成员,编译器的优化)

目录 一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 引入3.2 友元函数3.2.1 概念3.2.2 特性 3.3 友元类3.3.1 概念3.3.2 特性 四、内部类4.1 概念4.2 特性 五、匿名对象六、编译器的优化6.1 传参优化6.1.1 …

SpringBoot使用自带的日志框架(开箱即用,同时输出到文件与控制台)

在SpringBoot内部中&#xff0c;默认就集成了LogBack的日志依赖&#xff0c;所以我们其实在实际开发中不需要直接添加该依赖。 你会发现spring-boot-starter其中包含了 spring-boot-starter-logging&#xff0c;Spring Boot为我们提供了很多默认的日志配置&#xff0c;所以&…

Angular 2 学习笔记

Angular 2 应用主要由以下 几个部分组成&#xff1a; 1、模块 (Modules)&#xff1a; 2、组件 (Components)&#xff1a; 3、模板 (Templates)​​​​​​​&#xff1a; 4、元数据 (Metadata)&#xff1a; 5、数据绑定 (Data Binding) 6、指令 (Directives) 7、服务 (Servic…

【libcurl库】OpenSSL 库、多线程、断点续传(二)

一、libcurl函数库常用字段解读 1、curl_global_init()&#xff1a;初始化libcurl2、curl_easy_init()&#xff1a;得到easy interface型指针&#xff0c;拿到句柄3、curl_easy_setopt(CURL *handle, CURLoption option, parameter)&#xff1a;设置传输选项 第二个参数CURLop…

超聚变服务器(原华为服务器)网站模拟器

一、超聚变服务器&#xff08;原华为服务器&#xff09;网站模拟器&#xff1a; 原来了解服务器可以从他的网站上进行了解&#xff0c;模拟器做的很好了。 https://support.xfusion.com/server-simulators/ 有很多的模拟器&#xff0c;今天主要看下BMC的设置 有很多的在线工具…

XUbuntu22.04之HDMI显示器设置竖屏(一百九十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Unity3D 如何读取策划给定的Excel表格详解

前言 Unity3D是一款非常流行的游戏开发引擎&#xff0c;它可以帮助开发者快速构建游戏并进行测试和发布。在游戏开发过程中&#xff0c;策划经常会提供一些Excel表格&#xff0c;这些表格包含了游戏中的各种数据&#xff0c;如角色属性、技能效果等等。那么&#xff0c;如何在…

谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用

12 月 14 日消息&#xff0c;美国时间周三&#xff0c;谷歌宣布了一系列升级的人工智能&#xff08;AI&#xff09;功能&#xff0c;旨在为其云计算客户提供更好的服务。这家科技巨头正试图赶上竞争对手&#xff0c;比如微软和 OpenAI&#xff0c;它们都在积极利用人工智能的热…

Axure自定义元件

目录 1.processOne的使用 ​编辑2.自定义元件的使用、 2.1如何自定义一个元件 2.2使用自定义元件 导语&#xff1a; Axure是绘制原型图的软件&#xff0c;但是我们很多时候不知道&#xff0c;画哪一个板块&#xff0c;所以流程图的绘制也是非常重要的 1.processOne的使用…

【图论】普利姆算法,最小生成树

一次加入一个节点到我们的最下生成树中。加入哪个&#xff1f;跟着下面的步骤走一遍你就会了。 1. 把第一个节点A添加进来 2. 看两条边<A,B>,<A,E>,一个长度是3&#xff0c;一个长度是4&#xff0c;把长度短的边的另一个节点添加进来&#xff0c;也就是B 3. 再看A,…

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

超详细 | 哈里斯鹰优化算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F9 在MATLAB中执行程序结果如下&#xff1a; 在Python中执行程序结果如下&#xff1a; 哈里斯鹰优化算法(Harris Hawks Optimization , HHO)是 Heidari等[1]于2019年提出的一种新型元启发式算法&#xff0c;设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突…