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

如何获取React Table筛选后的数据用于Excel导出?

React Table 获取筛选后数据集实现Excel导出方案

react-table(含后续迭代的TanStack Table版本)内置了筛选后数据的访问能力,不需要重复实现筛选逻辑,不同版本对应实现方式如下:

  • TanStack Table v8 / React Table v7(主流钩子版本)
    初始化表格实例后,直接调用实例暴露的getFilteredRowModel()方法,即可拿到经过列筛选、全局筛选后的全量行数据,遍历取行的original属性就是你传入的原始业务数据结构,不会混入表格内部的自定义属性。
    示例代码:
    import { useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel } from '@tanstack/react-table'
    
    // 初始化表格实例
    const table = useReactTable({
      data,
      columns,
      getCoreRowModel: getCoreRowModel(),
      getFilteredRowModel: getFilteredRowModel(), // 别漏了注册这个行模型,少了这行拿不到正确的筛选结果
      // 其余筛选、排序、分页配置...
    })
    
    // 导出按钮触发逻辑
    const handleExportExcel = () => {
      // 仅筛选后的全量数据(不受分页影响)
      // 如果需要和表格当前排序顺序完全一致,替换为 table.getSortedRowModel().rows 即可
      const filteredRows = table.getFilteredRowModel().rows
      // 提取纯业务数据
      const exportSource = filteredRows.map(row => row.original)
    
      // 把exportSource传给xlsx、exceljs等导出库,执行后续Excel生成逻辑即可
      // 例:const worksheet = XLSX.utils.json_to_sheet(exportSource)
    }
    
    注意:如果表格开启了分页,不要用getPaginationRowModel()取数,这个API只会返回当前页的筛选结果,不是全量符合筛选条件的数据。
  • React Table v6 及更早旧版本
    旧版本实例直接暴露了filteredRows属性,直接读取即可拿到筛选后的行数据:
    const { filteredRows } = useTable({
      data,
      columns,
      // 筛选相关配置
    })
    
    const handleExport = () => {
      const exportSource = filteredRows.map(row => row.original)
      // 执行后续导出逻辑
    }
    
  • 服务端筛选场景
    如果你的筛选逻辑是走接口请求、数据由后端返回后存在前端状态中,不需要从表格实例取数,直接把当前传给表格组件的数据源(也就是接口返回的筛选结果集)作为导出源即可,这种场景下表格拿到的data本身就已经完成筛选了。

避坑提醒:不要自己重写筛选逻辑去匹配表格的筛选状态,很容易和组件内置的筛选规则(比如数字、日期的匹配逻辑,全局筛选的范围配置)不一致,导致导出数据和页面展示不符,优先用实例内置方法取数,能保证导出结果和用户在页面看到的筛选结果完全一致。

内容的提问来源于stack exchange,提问作者Lakshman Katari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:54:18