You need to enable JavaScript to run this app. 如何为使用动态数据源的表格添加分页功能
优惠活动
大模型
产品
解决方案
定价
更多

如何为使用动态数据源的表格添加分页功能

动态数据源表格分页实现方案

核心逻辑是把原来的前端分页模式改为服务端分页,所有分页计算逻辑和后端接口对齐,前端只负责传分页参数、渲染对应页返回的数据即可,具体实现步骤如下:

  • 第一步:定义分页核心状态
    单独维护三个分页参数:当前页码、每页展示条数、数据总条数,不要和表格数据源耦合存储。
  • 第二步:调整表格分页组件为受控模式
    关闭分页组件自带的前端切页能力,将分页组件的当前页、每页条数、总条数属性和上一步定义的状态绑定。比如AntD Table要把pagination属性设为受控配置,ElementUI Table要给分页组件的current-page、page-size做双向绑定,禁用自带的前端数据切割逻辑。
  • 第三步:封装分页数据拉取方法
    写独立的接口请求方法,调用时把当前的页码、每页条数作为参数传给后端,后端返回对应页的列表数据和总数据量;请求成功后做两个操作:1. 将返回的列表赋值给表格的dataSource;2. 把返回的总条数更新到分页状态中,分页组件会自动计算总页数。
  • 第四步:绑定分页切换事件
    给分页组件的页码切换、每页条数修改事件绑定回调,回调触发时直接更新分页参数,然后调用封装好的数据拉取方法即可,前端不需要做任何数据截取操作。

以下是React+AntD场景的示例代码:

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

const DynamicPaginationTable = () => {
  // 分页状态管理
  const [pagination, setPagination] = useState({
    current: 1,
    pageSize: 10,
    total: 0
  });
  const [tableData, setTableData] = useState([]);

  // 分页数据拉取方法
  const fetchPageData = async (page, pageSize) => {
    // 调用后端接口传分页参数,可额外拼接筛选、排序参数
    const res = await request('/api/table/list', {
      params: { page, pageSize }
    });
    setTableData(res.data.list);
    setPagination(prev => ({
      ...prev,
      total: res.data.total,
      current: page
    }));
  };

  // 初始化加载第一页数据
  useEffect(() => {
    fetchPageData(pagination.current, pagination.pageSize);
  }, []);

  // 分页变更回调
  const onPageChange = (page, pageSize) => {
    fetchPageData(page, pageSize);
  };

  return (
    <Table
      dataSource={tableData}
      columns={yourColumnConfig}
      rowKey="id"
      pagination={{
        ...pagination,
        showSizeChanger: true,
        onChange: onPageChange
      }}
    />
  )
}

补充注意:如果表格有筛选、排序功能,变更筛选条件时需要把页码重置为1再拉取数据,避免出现筛选后总页数减少、当前页码不存在的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:15:02