当前位置: 首页 > 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.xdnf.cn/news/1143919.html

相关文章:

  • MC0457符咒封印
  • Ansible + Shell 服务器巡检脚本
  • mysql not in 查询引发的bug问题记录
  • pycharm结构查看器
  • 2.3 前端-ts的接口以及自定义类型
  • 哪个厂家生产的戒烟药好:从机制到体验的差异化博弈
  • MySQL 插入时间 更新时间
  • 推荐 1 款 4.5k stars 的AI 大模型驱动的开源知识库搭建系统
  • 跨域问题及解决方案
  • AI(day10)模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • Java Web项目Dump文件分析指南
  • LLM(Large Language Model)大规模语言模型浅析
  • 在 Jenkins 中使用 SSH 部署密钥
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • C语言基础:数组练习题
  • 服务器内存满了怎么清理缓存?
  • 【C++】——类和对象(中)——默认成员函数
  • 前端基础——B/S工作原理、服务器与前端三大件
  • 【Docker】在Linux环境下使用Dockerfile打包镜像(图文示例)
  • 完整的 Meteor NPM 集成
  • 6 种无线传输照片从安卓到 Mac 的方法
  • UDP 协议下一发一收通信程序的实现与解析
  • 防爆手机是什么?能用普通手机改装吗?
  • 免费PDF文件格式转换工具
  • FastAdmin框架超级管理员密码重置与常规admin安全机制解析-卓伊凡|大东家
  • python学智能算法(二十三)|SVM-几何距离
  • react控制react Popover组件显示隐藏
  • 【怜渠客】简单实现手机云控Windows电脑锁屏
  • 力扣面试150(33/150)
  • pytest + requests 接口自动化测试框架