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());
目录
相关文章
|
4月前
Vue3——基于tdesign封装一个通用的查询组件
Vue3——基于tdesign封装一个通用的查询组件
139 3
|
2月前
|
Web App开发 JavaScript 数据可视化
vue3扩展echart封装为组件库-快速复用
vue3扩展echart封装为组件库-快速复用
151 7
|
3月前
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
70 0
|
7月前
|
资源调度 JavaScript 前端开发
将Elementui里的Table表格做成响应式并且和Pagination分页组件封装在一起(Vue实战系列)
将Elementui里的Table表格做成响应式并且和Pagination分页组件封装在一起(Vue实战系列)
334 2
|
7月前
|
前端开发 JavaScript
vue实现通用分页控件,支持前端分页、后端分页。
vue实现通用分页控件,支持前端分页、后端分页。
91 1
|
7月前
|
存储 JavaScript
js如何实现分页功能
js如何实现分页功能
78 0
|
JavaScript
VUE简单封装分页器组件
VUE简单封装分页器组件
77 0
|
前端开发
Concis组件库封装——Pagination分页器
Concis组件库封装——Pagination分页器组件封装
109 1
Concis组件库封装——Pagination分页器
|
JavaScript 测试技术 开发者
vue封装通用组件方法思路
vue封装通用组件方法思路
375 0
|
前端开发
前端学习笔记202305学习笔记第二十二天-分页组件封装和复用1
前端学习笔记202305学习笔记第二十二天-分页组件封装和复用1
44 0