antd CheckBox实现全选、多选
-
效果演示:
-
说明
antd 组件库中的CheckBox有全选的效果可配置,但是当checkbox.group的item是遍历出来时,就不能直接实现全选效果
-
实现思路
配合状态管理StateManage的使用,实时改变dataSource。此处卡片中使用的是单个CheckBox,而不是CheckBox.Group。
-
当点击【全选】CheckBox时,如果checked为true,则往Set对象checkedListSet中添加dataSource的所有item。并且给dataSource中每个item都添加checked属性,值为true。
-
然后将map返回的dataSource(已添加checked属性) set 到状态管理中 ,setCheckAll(e.target.checked)控制当前是否全选。
-
item中checkedbox的checked状态由dataSource遍历获得,当某个item触发onChange时,先修改dataSource. item中的checked状态,然后在状态管理中更新dataSource, 确保每个item的checked状态都与dataSource中的一致。
-
获取当前勾选的item,遍历dataSource,然后add到Set对象checkedListSet中
-
-
关键代码
--逻辑处理部分代码---------------------------------------
// 单个CheckBox
const onChange = () => {
dataSource.map(item => {
item.checked ? checkedListSet.add(item.id) : null;
setCheckedIds([