react使用antd中的Checkbox实现多选

简介: 在React项目中,通过Ant Design的Checkbox组件实现多选。引入Checkbox,使用Checkbox.Group来管理Checkbox,设置`value`属性绑定选中项数组,通过`onChange`更新数组。维护一个全选状态,根据选中项数量与总数决定全选按钮状态。全选按钮的`onChange`事件用于控制所有Checkbox的选中状态。

效果图:
在这里插入图片描述

首先引入antd中的Checkbox

import {
    Checkbox } from 'antd';
const CheckboxGroup = Checkbox.Group;

在页面上使用:

  <CheckboxGroup 
          style={
   {
    display: "flex", flexWrap: "wrap" }} 
         value={
   selectList} 
          onChange={
   this.onChangeCheck} >
           {
   dataInfoList.map(function (item) {
   
                 return (
                          <Checkbox 
                            key={
   item.hostId}
                            value={
   item.hostId}>
                                 {
   item.hostName} 
                          </Checkbox>
                   )
               })}
  </CheckboxGroup>

通过接口获取数据:

 GroupListInfo(flag).then(res => {
   
            if (res.code !== 200) {
   
                message.warning(res.message)
                return false;
            }
            let {
    data } = res.data
            let dataList = []
            for (let i = 0; i < data.length; i++) {
   
                dataList = [...dataList, data[i].hostId]
            }
            let selectList = data.map(i => {
   
                if (i.selected === true) {
   
                    return i.hostId
                }
            }).filter(i => i !== undefined)
            this.setState({
   
                selectList,
                dataList: dataList,
                dataInfoList: data,
                checkAll: selectList.length === data.length ? true : false
            })
        })

selectList:所有选中的id,放到一个数组里面,用于返显数据;
dataList:所有的id,就是所有项的id,都放到了这个数组里面;
dataInfoList:接口返回的所有数组数据;
checkAll:boolean 全选按钮的选中与否;

onChangeCheck为每一个checkbox的change事件:

    onChangeCheck = selectList => {
   
        this.setState({
   
            selectList,
            checkAll: selectList.length === this.state.dataInfoList.length,
        });
    };

每次点击都能返回一个形参,这个形参就是当前这个checkgroup的所有选中项;
并判断如果当前选中项的个数等于总数据的个数,那么当前全选按钮应该为true,选中状态;

全选BTN:

    <Checkbox 
        onChange={
   this.onCheckAllChange} 
        checked={
   checkAll} >
            (全选)
    /Checkbox>

onCheckAllChange事件为点击全选按钮触发的事件:

 // 全选
    onCheckAllChange = _ => {
      
        this.setState({
   
            selectList: e.target.checked ? this.state.dataList: [],
            checkAll: e.target.checked
        })
    };

判断checked 选中状态,对selectList重新赋值。checkAll设置为最新的状态。

目录
相关文章
|
2天前
|
前端开发
React给antd中TreeSelect组件左侧加自定义图标icon
本文介绍了如何在React中为Ant Design的TreeSelect组件的每个树节点添加自定义图标,并解决了因缺少key属性而导致的警告问题,展示了如何通过递归函数处理treeData数据并为每个节点添加图标。
9 2
React给antd中TreeSelect组件左侧加自定义图标icon
|
2天前
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
15 2
react对antd中Select组件二次封装
|
2天前
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
10 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
1天前
|
前端开发 数据安全/隐私保护
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
文章介绍了如何在React项目中使用Ant Design实现一个修改密码的组件,包括原密码、新密码和再次输入新密码的表单项,并为新密码增加了正则表达式复杂度校验。
8 0
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
|
2天前
|
前端开发 计算机视觉
React使用antd实现可编辑单元格
React结合Ant Design实现可编辑单元格的表格组件,通过EditableRow和EditableCell封装实现单元格编辑功能,并提供saveFun回调保存编辑内容。
8 1
|
2天前
|
前端开发
React按需加载antd步骤以及出现的问题
在使用`babel-plugin-import`插件时,可以在项目的根目录创建`.babelrc`文件或在`package.json`中添加babel配置。这两个文件中不应该存在重复的配置。如果出现"Multiple configuration files found"错误,需要选择其中一个文件进行配置,并删除另一个文件中的babel配置。使用该插件后,可以直接从`antd`引入组件,无需手动引入样式文件。
12 1
|
3天前
|
前端开发
React 中购物车功能实现(全选多选功能实现)
React 中购物车功能实现(全选多选功能实现)
|
24天前
|
前端开发
react antd点击table行时加选中背景色
react antd点击table行时加选中背景色
54 5
|
2月前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
93 1
|
1月前
|
前端开发 JavaScript UED
React 基础与实践 | 青训营笔记
React 基础与实践 | 青训营笔记
41 0