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

如何获取react table全局筛选后的数据长度并通过react-helmet设置页面标题

React Table 获取全局筛选后数据总长度的解决方法

实现原理

React Table 中preGlobalFilteredRows是未经过全局筛选的原始数据行,而经过所有过滤器(包括globalFilter)、排序处理后的全量数据(未分页),可以通过useTable返回的rows属性获取,它的长度就是筛选后的总条数。

修改步骤

  1. 调整Table组件中useTable的返回值解构,新增获取rows属性
  2. 将筛选后的总条数rows.length作为参数传递给GlobalFilter组件
  3. 在GlobalFilter组件中接收筛选后的计数,替换页面标题、搜索框占位符中原来的原始计数

代码修改示例

1. Table组件修改

// 解构useTable返回值时新增rows
const {
  getTableProps,
  getTableBodyProps,
  headerGroups,
  page,
  prepareRow,
  previousPage,
  nextPage,
  canPreviousPage,
  canNextPage,
  state,
  setPageSize,
  pageOptions,
  gotoPage,
  pageCount,
  setGlobalFilter,
  preGlobalFilteredRows,
  rows // 新增该行
} = useTable(
  {
    columns,
    data,
  },
  useGlobalFilter,
  useSortBy,
  usePagination
);

// 给GlobalFilter传递新增的filteredCount参数
<GlobalFilter
  preGlobalFilteredRows={preGlobalFilteredRows}
  globalFilter={state.globalFilter}
  setGlobalFilter={setGlobalFilter}
  filteredCount={rows.length} // 新增该行
/>

2. GlobalFilter组件修改

// 接收新增的filteredCount参数
const GlobalFilter = ({
  preGlobalFilteredRows,
  globalFilter,
  setGlobalFilter,
  filteredCount // 新增该行
}) => {
  const totalCount = preGlobalFilteredRows.length;
  const [value, setValue] = useState(globalFilter);
  const onChange = useAsyncDebounce((value) => {
    setGlobalFilter(value || undefined);
  }, 200);

  return (
    <>
      <Helmet>
        {/* 替换为筛选后的计数 */}
        <title>{`${filteredCount} 条记录找到`}</title>
      </Helmet>
      <label className="flex gap-x-2 items-baseline">
        <span className="text-primary-dark">搜索: </span>
        <input
          type="text"
          className="text-primary-dark rounded-md border-gray-300 shadow-sm outline-none p-2"
          value={value || ""}
          onChange={(e) => {
            setValue(e.target.value);
            onChange(e.target.value);
          }}
          {/* 可按需修改占位符展示逻辑 */}
          placeholder={`共${totalCount}条记录`}
        />
      </label>
    </>
  );
};

补充说明

如果你需要获取当前分页展示的条目数,直接使用page.length即可,不需要额外传递rows参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:54:08