antd-protable的分页逻辑封装

简介: antd-protable的分页逻辑封装

一、前言

这次的分页基于pro-table进行封装。

前端分页看似是个小功能,但里面隐藏的逻辑还是非常多的,比如我们业务中需要的分页器除了能进行正常的页码切换等操作外,还需要如下的功能:

  1. 次页删除最后一条数据需要跳转至第一页;
  2. 次页新建数据需要跳转到第一页,修改数据要保留本页;
  3. 切换单页数量大小后需要设为后续的默认分页大小;

这四个功能点都不难,但是基本所有的表格列表都需要这四个功能,所以我们需要封装一个公共的table避免写重复性的代码。

二、分页器封装

首先创建一个分页器:

const [handlePagination, setHandlePagination] = useState<object>({
    current: 1,
    pageSize: defaultPageSize,
    showSizeChanger: true,
    onShowSizeChange: (current: number, size: number) => {
      localStorage.setItem('defaultPageSize', size.toString());
      setHandlePagination({ ...handlePagination, ...{ pageSize: size, current: current } });
    },
  });

1)次页删除最后一条数据需要跳转至第一页

封装删除方法,在删除的数据不是第一页且是最后一条数据时则修改current为1,代表跳转至第一页:

const deleteDataFunc = async (func: any, record_id: any) => {
    await func(record_id, DELETE).then((_: any) => {
      const currentPage = ref.current?.pageInfo.current || 1;
      if (currentPage > 1 && dataLength <= 1) {
        //在非首页的最后一条数据被删除时,改变页码为前一页进行请求
        setHandlePagination({ ...handlePagination, ...{ current: currentPage - 1 || 1 } });
      }
      ref.current.reload();
    });
  };

2)次页新建数据需要跳转到第一页,修改数据要保留本页

跳转第一页刷新还是保留本页刷新的方法在pro-table中是已经提供了的,方法如下:

ref.current.reloadAndRest() //跳转第一页刷新
ref.current.reload() //保留本页刷新

所以我们只需要封装一个方法来判断是创建数据还是修改数据即可,因为我们的接口特殊性(POST请求代表创建,PATCH请求代表修改)所以可以下面这样写:

onRefresh: (formType: string) => (formType === POST ? ref.current.reloadAndRest() : ref.current.reload()),

3)切换单页数量大小后需要设为后续的默认分页大小

这个实现就很简单了,直接在每次onShowSizeChange通过localStorage设置即可,后面再通过getItem的方法设置默认分页大小即可:

localStorage.setItem('defaultPageSize', size.toString());
目录
相关文章
antd-procomponent中编辑表格动态数据设置的使用
antd-procomponent中编辑表格动态数据设置的使用
1026 0
|
测试技术 Windows
umi如何配置环境变量
umi如何配置环境变量
1240 0
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
5515 2
|
SQL JSON 数据格式
获取中国【省、市、区县、乡镇街道】json,csv,sql数据
获取中国【省、市、区县、乡镇街道】json,csv,sql数据
4741 0
数据采集 JavaScript 测试技术
208 0
|
人工智能 边缘计算 自然语言处理
|
9月前
|
XML JSON 数据格式
Python 3.14 实用技巧:10个让代码更清晰的小改进
Python 3.14 带来10项实用改进:类型系统增强、错误提示更清晰、导入优化、异步任务取消更稳定,并新增 `chdir()` 上下文管理器等。虽改动细微,却显著提升代码可读性、调试效率与运行稳定性,适合自动化脚本与日常开发。升级即享,无需额外成本。
595 10
Python 3.14 实用技巧:10个让代码更清晰的小改进
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
626 1
|
运维 监控 安全
WAN 革命:SD-WAN 与传统 WAN 对比
【7月更文挑战第13天】
1730 1
WAN 革命:SD-WAN 与传统 WAN 对比
|
测试技术 Python
Python教程:利用timeit模块对代码进行性能测试
在Python中,了解代码的性能是优化和改进的关键。timeit模块是Python标准库中的一个工具,用于测量代码片段的执行时间。本文将介绍timeit模块的各种接口、命令行使用方法以及如何对代码中的函数或类进行性能测试。
685 3