当前位置:首页 > 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 优化性能:

    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-antd实现全选

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

相关文章

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 编写组件代码 在…

vue 实现全选

vue 实现全选

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

vue全选实现

vue全选实现

Vue 全选实现方法 使用 v-model 绑定复选框 在 Vue 中,可以通过 v-model 绑定复选框的状态。全选功能可以通过一个主复选框控制多个子复选框的状态。 <templa…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyf…