You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ant Design Table组件执行过滤后如何获取筛选后的数据源?

嘿,这个问题我之前也碰到过!Ant Design的Table组件确实没有直接提供获取筛选后数据的现成API,但咱们可以通过几种靠谱的方式来实现,下面给你分享几个实用方案:

方案一:手动根据筛选条件过滤数据源

这是最稳妥也最灵活的方式,利用onChange回调返回的筛选、排序等条件,自己对原始的dataSource进行过滤处理。直接上代码示例:

import { useState } from 'react';
import { Table } from 'antd';

const MyTable = () => {
  // 原始数据源
  const originalDataSource = [
    { id: 1, name: '张三', age: 25, department: '技术部' },
    { id: 2, name: '李四', age: 30, department: '市场部' },
    { id: 3, name: '王五', age: 28, department: '技术部' },
    // 更多数据...
  ];
  // 用于存储筛选/排序后的结果
  const [processedData, setProcessedData] = useState(originalDataSource);

  const handleTableChange = (pagination, filters, sorter) => {
    let tempData = [...originalDataSource];

    // 处理筛选条件
    Object.entries(filters).forEach(([key, values]) => {
      if (values.length > 0) {
        tempData = tempData.filter(item => values.includes(item[key]));
      }
    });

    // 处理排序逻辑(如果需要的话)
    if (sorter.field && sorter.order) {
      tempData = tempData.sort((a, b) => {
        const isAscend = sorter.order === 'ascend';
        if (a[sorter.field] > b[sorter.field]) return isAscend ? 1 : -1;
        if (a[sorter.field] < b[sorter.field]) return isAscend ? -1 : 1;
        return 0;
      });
    }

    // 更新处理后的数据
    setProcessedData(tempData);
  };

  const columns = [
    { title: '姓名', dataIndex: 'name', key: 'name' },
    { title: '年龄', dataIndex: 'age', key: 'age' },
    { title: '部门', dataIndex: 'department', key: 'department', filters: [
      { text: '技术部', value: '技术部' },
      { text: '市场部', value: '市场部' },
    ], onFilter: (value, record) => record.department === value },
  ];

  return (
    <Table
      dataSource={processedData}
      columns={columns}
      rowKey="id"
      onChange={handleTableChange}
    />
  );
};

export default MyTable;

这个方法的优势在于完全可控,不管是简单的等值筛选还是复杂的自定义过滤逻辑,你都能自己实现,而且不依赖组件内部的未公开API,稳定性拉满。

方案二:后端分页/筛选场景直接用接口返回数据

如果你的表格数据是后端分页或者后端处理筛选的,那根本不用前端自己过滤——onChange回调里拿到筛选、分页条件后,传给后端接口,接口返回的就是已经筛选好的数据,直接用这个数据更新表格的dataSource就完事了,这也是实际项目中最常用的方式之一。

不推荐的方案:依赖DOM或未公开API

有些朋友可能会想着通过Table的ref去拿内部状态,或者通过DOM元素提取渲染后的行数据,但这些方法都依赖Ant Design的内部实现细节,版本更新很可能就失效了,生产环境千万慎用!

总结一下,优先选方案一(前端过滤)或者方案二(后端处理),这两个都是官方推荐的思路,靠谱又好维护。

内容的提问来源于stack exchange,提问作者Jochen Shi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:17:23