当前位置:首页 > React

react-antd实现全选

2026-01-27 16:22:39React

使用 React 和 Ant Design 实现全选功能

实现全选功能的核心是结合 Ant Design 的 TableCheckbox 组件

基础实现方法

  1. 准备数据与状态管理 在组件中定义数据源和选中状态:

    const [data, setData] = useState([
      { id: 1, name: 'Item 1' },
      { id: 2, name: 'Item 2' },
      { id: 3, name: 'Item 3' }
    ]);
    const [selectedRowKeys, setSelectedRowKeys] = useState([]);
  2. 配置 Table 的 rowSelection 使用 Ant Design Table 的 rowSelection 属性:

    const rowSelection = {
      selectedRowKeys,
      onChange: (selectedKeys) => {
        setSelectedRowKeys(selectedKeys);
      },
      getCheckboxProps: (record) => ({
        disabled: record.disabled // 可选:禁用某些行的选择
      })
    };
    
    <Table
      rowSelection={rowSelection}
      dataSource={data}
      columns={columns}
      rowKey="id"
    />
  3. 添加全选控制按钮 在表格上方添加控制全选的 Checkbox:

    const onSelectAll = (e) => {
      if (e.target.checked) {
        setSelectedRowKeys(data.map(item => item.id));
      } else {
        setSelectedRowKeys([]);
      }
    };
    
    <Checkbox
      checked={selectedRowKeys.length === data.length}
      indeterminate={selectedRowKeys.length > 0 && selectedRowKeys.length < data.length}
      onChange={onSelectAll}
    >
      全选
    </Checkbox>

高级实现技巧

  1. 分页全选处理 对于分页表格,需要额外处理跨页全选逻辑:

    const [allSelectedKeys, setAllSelectedKeys] = useState([]);
    
    const handleSelectAll = (e) => {
      if (e.target.checked) {
        const currentPageKeys = data.map(item => item.id);
        setAllSelectedKeys([...new Set([...allSelectedKeys, ...currentPageKeys])]);
        setSelectedRowKeys(currentPageKeys);
      } else {
        setAllSelectedKeys(allSelectedKeys.filter(key => !data.some(item => item.id === key)));
        setSelectedRowKeys([]);
      }
    };
  2. 带筛选条件的全选 当表格有筛选条件时,全选应只针对当前筛选结果:

    const [filteredData, setFilteredData] = useState(data);
    
    const onSelectAllFiltered = (e) => {
      if (e.target.checked) {
        setSelectedRowKeys(filteredData.map(item => item.id));
      } else {
        setSelectedRowKeys(selectedRowKeys.filter(key => 
          !filteredData.some(item => item.id === key)
        ));
      }
    };
  3. 性能优化 对于大数据量表格,使用 memoization 优化性能:

    react-antd实现全选

    const rowSelection = useMemo(() => ({
      selectedRowKeys,
      onChange: setSelectedRowKeys,
      preserveSelectedRowKeys: true
    }), [selectedRowKeys]);

完整示例代码

import React, { useState, useMemo } from 'react';
import { Table, Checkbox } from 'antd';

const SelectableTable = () => {
  const [data] = useState([
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' }
  ]);

  const [selectedRowKeys, setSelectedRowKeys] = useState([]);

  const columns = [
    { title: 'ID', dataIndex: 'id' },
    { title: 'Name', dataIndex: 'name' }
  ];

  const rowSelection = useMemo(() => ({
    selectedRowKeys,
    onChange: setSelectedRowKeys
  }), [selectedRowKeys]);

  const onSelectAll = (e) => {
    if (e.target.checked) {
      setSelectedRowKeys(data.map(item => item.id));
    } else {
      setSelectedRowKeys([]);
    }
  };

  return (
    <div>
      <Checkbox
        checked={selectedRowKeys.length === data.length}
        indeterminate={selectedRowKeys.length > 0 && selectedRowKeys.length < data.length}
        onChange={onSelectAll}
      >
        全选
      </Checkbox>

      <Table
        rowSelection={rowSelection}
        dataSource={data}
        columns={columns}
        rowKey="id"
      />
    </div>
  );
};

export default SelectableTable;

注意事项

  • 确保为每条数据设置了唯一的 rowKey 属性
  • 处理分页数据时需要额外考虑跨页选择逻辑
  • 大数据量情况下考虑使用虚拟滚动或分页加载优化性能
  • 当表格有筛选或排序功能时,全选操作应只针对当前显示的数据

标签: 全选react
分享给朋友:

相关文章

vue 实现全选

vue 实现全选

实现全选功能的方法 在 Vue 中实现全选功能通常涉及以下关键步骤: 数据绑定与状态管理 使用 v-model 绑定全选复选框的状态,并通过计算属性或方法管理子项的选中状态。例如: data()…

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态文…

理解如何react

理解如何react

理解React的核心概念 React是一个用于构建用户界面的JavaScript库,专注于通过组件化开发提高代码的可维护性和复用性。其核心思想包括虚拟DOM(Virtual DOM)和单向数据流,能够…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…