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());
目录
相关文章
Please use ‘App‘ component instead.报错问题解决
Please use ‘App‘ component instead.报错问题解决
931 0
|
前端开发
css div覆盖样式(一个div想覆盖掉另一个div在他上面进行显示)
css div覆盖样式(一个div想覆盖掉另一个div在他上面进行显示)
218 0
|
开发框架 自然语言处理 前端开发
【第25期】一文读懂React企业级前端应用框架Umi
【第25期】一文读懂React企业级前端应用框架Umi
732 0
|
移动开发 缓存 JavaScript
2021最新阿里代码规范(前端篇)
2021最新阿里代码规范(前端篇)
56251 11
2021最新阿里代码规范(前端篇)
|
SQL XML 关系型数据库
Mybatis-Plus通过SQL注入器实现真正的批量插入
Mybatis-Plus通过SQL注入器实现真正的批量插入
6414 0
Mybatis-Plus通过SQL注入器实现真正的批量插入
|
网络协议 JavaScript 前端开发
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名2
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名
2863 0
|
缓存 JSON 前端开发
CORS 详解,终于不用担心跨域问题了
CORS 详解,终于不用担心跨域问题了
8523 1
CORS 详解,终于不用担心跨域问题了
|
存储 索引
antd中table组件选中单行换样式(比如背景颜色)
在Ant Design (antd)的Table组件中,可以通过设置`onRow`属性来定义行点击事件,从而改变被点击行的样式,如背景颜色。`onRow`是一个函数,返回一个对象,对象包含事件处理函数,如`onClick`。同时,使用`rowClassName`属性来指定行的类名,结合状态管理,可以实现点击某行后改变其背景颜色的效果。具体实现时,需要在组件状态中保存当前被点击行的索引,然后通过`rowClassName`判断并返回相应的类名。
1234 2
antd中table组件选中单行换样式(比如背景颜色)
|
缓存 JavaScript 安全
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
1905 0
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
|
JavaScript
cnpm 的安装与使用
本文介绍了npm和cnpm的概念、安装nodejs的步骤,以及cnpm的安装和使用方法,提供了通过配置npm使用中国镜像源来加速包下载的替代方案,并说明了如何恢复npm默认仓库地址。
cnpm 的安装与使用