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

React 实现人员列表多选、全选与取消全选功能

 如图要实现的功能要求为:

点击选择按钮,页面弹出抽屉的方式显示人员信息。

人员信息选中时候,将人员信息显示在人员列表中。人员信息取消选中时候,人员信息不可显示在人员列表中。

人员信息全部选中时,表头中的人员姓名前面的checkbox显示为选中状态,并将人员信息显示在人员列表中。人员信息全部取消选中时,表头中的人员姓名前面的checkbox显示为取消选中状态,并将人员信息不显示在人员列表中。

点击翻页,加载相关对应页码的人员信息数据。如果存在被选中的人员信息,则checkbox为选中状态。当存在人员信息全部选中时表头中的人员姓名前面的checkbox为选中状态。

第一步:定义数据state项

定义state数据项目
//用来控制抽屉开关
const [isShows,setisShows]=useState(false);
//用来人员信息存储
const [xingmingList,setxingmingList]=useState([]);
//用来表示表头中是否全部选中状态 
const [isCheckAll,setisCheckAll]=useState(false);
//人员列表
const [addmanList,setaddmanList]=useState([]);

第二步:选择人员部分结构、模拟数据

<div className="x"><div className="x_left"><Checkbox onChange={onCheckAllChange} checked={isCheckAll}></Checkbox><div className="x_left_name">人员姓名</div></div><Divider type="vertical" style={{h:20,:1,backgroundColor:'#efefef',opacity:0.5}}/><div className="x_right">部门</div>
</div><div  className="y">
{xingmingList.map((i,inidex)=>{return (<div className="y_item" key={i.id}><div className="y_item_left"><Checkbox onChange={(e)=>onCheckChange(e,i)} checked={item.checked}></Checkbox><div className="y_item_left_name">{i.name}</div></div><div className="y_item_right">{i.department}</div></div>)})
}
</div>//模拟初始化数据
let xingminglist=[{id:'pichangshan',name:'皮常山',department:'周口-许昌-平顶山',tel:'13112345678',checked:false},{id:'xieguangkun',name:'谢广坤',department:'智慧燃气部',tel:'15112345678',checked:false},{id:'wanglaoqi',name:'王老七',department:'综合管理部',tel:'18112345678',checked:false},{id:'liuneng',name:'刘能',department:'财务管理部',tel:'13612345678',checked:false},{id:'zhaosi',name:'赵四',department:'安全生产中心,数智科技中心',tel:'13812345678',checked:false}
]

第三步:打开抽屉和关闭抽屉

function handleShowDraws(){setisShows(true);setisCheckAll(false);let xingminglist1=[{id:'pichangshan',name:'皮常山',department:'周口-许昌-平顶山项目组',tel:'13112345678',checked:false},{id:'xieguangkun',name:'谢广坤',department:'智慧燃气部',tel:'15112345678',checked:false},{id:'wanglaoqi',name:'王老七',department:'综合管理部',tel:'18112345678',checked:false},{id:'liuneng',name:'刘能',department:'财务管理部',tel:'13612345678',checked:false},{id:'zhaosi',name:'赵四',department:'安全生产中心,数智科技中心',tel:'13812345678',checked:false}]let num=0;let addmanlist=addmanList;xingminglist1.forEach(item => {let matched = addmanlist.find(obj => obj.id === item.id);if (matched){item.checked=true;num+=1;}        });if(num==xingminglist1.length){setisCheckAll(true)}setxingmingList(xingminglist1);setcurrents(1);}function onDrawerCloses(){setisShows(false);setaddmanList([]);setisCheckAll(false);}

第四步:多选方法

  function onCheckChange(e,item){let ischecked=e.target.checked;let selectId=item.id;let num=0;let xingminglist=xingmingList;xingminglist.map((item,index)=>{if(item.id==selectId){item.checked=ischecked;if(item.checked==true){setaddmanList(prev=>[...prev,item]);}else{let array=addmanList.filter(i=>i.id!==selectId);setaddmanList([...array]);}}})setxingmingList([...xingminglist]);xingminglist.map((item,index)=>{if(item.checked==true){num+=1;}})if(num==xingminglist.length){setisCheckAll(true);}else{setisCheckAll(false);}    };

第五步:全选方法

  function onCheckAllChange(e){let ischecked=e.target.checked;setisCheckAll(ischecked);let addmanlist=addmanList;let xingminglist=xingmingList;xingminglist.map((item,index)=>{item.checked=ischecked;})if(ischecked==true){let array = [...new Set([...xingminglist,...addmanlist].map(item => JSON.stringify(item)))].map(item => JSON.parse(item));setaddmanList(array);}else{let array = addmanlist.filter(itemA => !xingminglist.some(itemB => itemA.id === itemB.id));setaddmanList(array);}};

第六步:翻页

function handleChangePages(page){setcurrents(page);if(page==1){setisCheckAll(false)let xingminglist1=[{id:'pichangshan',name:'皮常山',department:'周口-许昌-平顶山项目组',tel:'13112345678',checked:false},{id:'xieguangkun',name:'谢广坤',department:'智慧燃气部',tel:'15112345678',checked:false},{id:'wanglaoqi',name:'王老七',department:'综合管理部',tel:'18112345678',checked:false},{id:'liuneng',name:'刘能',department:'财务管理部',tel:'13612345678',checked:false},{id:'zhaosi',name:'赵四',department:'安全生产中心,数智科技中心',tel:'13812345678',checked:false}]let num=0;let addmanlist=addmanList;xingminglist1.forEach(item => {let matched = addmanlist.find(obj => obj.id === item.id);if (matched){item.checked=true;num+=1;}        });if(num==xingminglist1.length){setisCheckAll(true);}setxingmingList(xingminglist1);}if(page==2){setisCheckAll(false)let xingminglist2=[{ id:'songxiaofeng',name:'宋晓锋',department:'周口-许昌-平顶山项目组',tel:'131123456788',checked:false},{ id:'xieyongqiang',name:'谢永强',department:'智慧燃气部',tel:'15112345678',checked:false},{ id:'zhaoyutian',name:'赵玉田',department:'综合管理部',tel:'18112345678',checked:false},{ id:'wangtianlai',name:'王天来',department:'财务管理部',tel:'13612345678',checked:false},{ id:'lidaguo',name:'李大国',department:'安全生产中心,数智科技中心',tel:'13812345678',checked:false}]let num=0;let addmanlist=addmanList;xingminglist2.forEach(item => {let matched = addmanlist.find(obj => obj.id === item.id);if (matched){item.checked=true;num+=1;}});if(num==xingminglist2.length){setisCheckAll(true)}setxingmingList(xingminglist2);      }}

第七步:点击确认或取消

  function xinjianbaocun2(){setisShows(false);}function xinjianquxiao2(){setisShows(false);setaddmanList([]);setisCheckAll(false);}

http://www.dtcms.com/a/286669.html

相关文章:

  • 大疆司空2私有化部署报错解决方案
  • 谷歌浏览器Chrome的多用户配置文件功能
  • Python分组柱形图绘制全攻略
  • 题解:CF1866D Digital Wallet
  • 熔断和降*的区别
  • 使用pt-toolkit工具包进行MySQL性能优化实战指南
  • 算法训练营day24 回溯算法③ 93.复原IP地址 、78.子集、 90.子集II
  • AWS SSL证书无缝迁移完整指南 - 零业务中断方案
  • Python 进程间通信:TCP安全加密数据传输
  • H3CNE小小综合实验
  • 模拟数据生成---使用NGS数据模拟软件VarBen
  • SLM343CK-DG Sillumin数明半导体高性能LED驱动芯片 抗干扰+耐高温 车载照明专用
  • 二叉树(建立 + 遍历 + 拓展)
  • 外部DLL创建及使用
  • 灵巧手(具身智能入门十一)
  • if (a == 1 a == 2 a == 3)返回true的问题思考
  • NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
  • MySQL组内拼接group_concat函数
  • MyUI会员排名VcMember组件文档
  • Java与Vue技术搭建的SRM招标采购管理系统,提供源码,涵盖招标、投标、评标全流程,助力企业高效规范采购管理
  • spring-cloud微服务部署-feign服务间调用
  • NFS读写性能评估与优化指南(下)
  • 二叉搜索树:高效的查找结构
  • 自学力扣:最长连续序列
  • python-pptx 的layout 布局
  • CCF编程能力等级认证GESP—C++1级—20250628
  • 扫地机器人,需要回归第一性原理
  • Docker安装教程
  • Visual Studio C++编译器优化等级详解:配置、原理与编码实践
  • 第七章 愿景07 实习小宇