封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等

ops/2024/9/17 19:01:44/ 标签: react, antd, table, 封装, 前端

一般情况下,我们在页面组件里面都会使用state创建对应的分页参数和分页方法然后传入对应的组件内部,再或者选择行、全选等等,这都会在每一个组件中徒增大量的代码行数,所以简单整理了一下这个只是针对于处理逻辑的组件:
useTableCom

import { map, uniqBy } from 'lodash-es'
import { useState } from 'react'
// 表格分页参数默认值
const cur = 1
const pagesize = 10
export default function useRowSelection({ rowKey = 'id', getTable = () => {} }) {// 表格选中的id (rowKey)const [selectedRowKeys, setSelectedRowKeys] = useState([])// 当前选中的行元素对象const [selectedList, setSelectedList] = useState([])const [pageNum, setCurrent] = useState(cur)const [pageSize, setPageSize] = useState(pagesize)// 记录当前表格查询条件const [curparams, setcurparams] = useState({})// 表格多选const rowSelection = {// 当前选中行listselectedRowKeys,// 禁用选中getCheckboxProps: record => ({disabled: record.disabled,}),// onChange: (keys, selectedRows, info) => {//     console.log(keys, selectedRows, info)// },// 单选按钮onSelect: (record, selected) => {let selectedData = selectedList// 选中 pushif (selected) {selectedData.push(record)} else {// 未选中 spliceselectedData.splice(selectedData.findIndex(item => item[rowKey] === record[rowKey]),1,)}selectedData = uniqBy(selectedData, rowKey)setSelectedList(selectedData)setSelectedRowKeys(map(selectedData, rowKey))},// 全选按钮onSelectAll: (selected, selectedRows, changeRows) => {let selectedData = selectedListif (selected) {selectedData = selectedData.concat(changeRows)} else {selectedData = selectedData.filter(x => !changeRows.find(change => change[rowKey] === x[rowKey]))}selectedData = uniqBy(selectedData, rowKey)setSelectedList(selectedData)setSelectedRowKeys(map(selectedData, rowKey))},}// 重置当前选中项const initSelect = () => {setSelectedRowKeys([])setSelectedList([])}// 这个可以页面初始化或者重置查询条件的时候使用const changeCurrentAndPageSize = async (pageNum = cur, pageSize = pagesize, params = {}) => {setCurrent(pageNum)setPageSize(pageSize)setcurparams(params)getTable({ pageNum, pageSize, ...params })}// 点击跳转页码或者下一页的时候const paginationChange = (p, ps) => {if (ps !== pageSize) {changeCurrentAndPageSize(1, ps, curparams)} else {changeCurrentAndPageSize(p, ps, curparams)}}// 设置当前分页参数 const changeCurrentAndPageSizeNum = (pageNum = cur, pageSize = pagesize) => {setCurrent(pageNum)setPageSize(pageSize)}return {// 当前页pageNum,changeCurrentAndPageSizeNum,setCurrent,// 当前页显示条数pageSize,setPageSize,// 改变当前页码changeCurrentAndPageSize,// 给table组件的改变页面的方法paginationChange,// 选中行方法rowSelection,// 当前选中的 rowKey listselectedRowKeys,// 当前选中的 对象 listselectedList,// 设置当前选中的 rowKey listsetSelectedRowKeys,// 设置当前选中的 对象 listsetSelectedList,// 初始化选中框initSelect,}
}

使用的时候我们我们只需要传入当前list每一行的key以及,对应的表格查询方法即可。

使用:

const getTable = async (obj = {}) => {setList([])setTotal(0)setLoading(true)const res = await IPServe.aaa(obj)if (res && res.code === 200) {const { data = [], total = 0 } = res.data || {}setList(data)setTotal(total)}setLoading(false)}
const {pageNum,pageSize,changeCurrentAndPageSize,// rowSelection,// selectedRowKeys,// initSelect,paginationChange,} = useRowSelection({rowKey: 'id',getTable,})
	form表单收集查询参数即可const search = async () => {changeCurrentAndPageSize(1, 10, {...form.getFieldsValue(),})}
    const reset = () => {form.resetFields()changeCurrentAndPageSize(1, 10, {...form.getFieldsValue(),})}
<myTableProps={{title: '列表',columns: [],dataSource: [],showPagination: true,rowKey: 'id',}}pageProps={{ total, pageNum, onChange: paginationChange, pageSize }}/>

当然我们也可以将total也搞到组件里面。
myTable是自己封装的组件,当然table组件无非就这些参数。


http://www.ppmy.cn/ops/4736.html

相关文章

2231: 【数学】质因数分解

题目描述 对于正整数N的质因数分解&#xff0c;指的是将其写成以下形式&#xff1a; Np1*p2*...*pm,其中p1,p2,...pm为不下降的质数 给定N&#xff0c;输出其质因数分解的形式。 输入 输入一个正整数N。 输出 输出N的质因数分解的形式p1*p2*...*pm&#xff0c;其中p1,p2,…

mac修改/etc/profile导致终端所有命令不可使用

原因&#xff1a;配置docker环境的时候修改了/etc/profile&#xff0c;没想到导致悲惨事情&#xff0c;输入什么命令都是 Command not found 可恶&#xff01;&#xff01;&#xff01;试了好久&#xff0c;最终这样搞定&#xff01; 1-终端输入命令 因为sudo命令也不能直接…

.NetCore——自定义筛选器

【异常筛选器】 在 ASP.NET Core Web API 中,异常处理是一个非常重要的环节,如果程序中出现未处理异常,就会生成响应报文。通过捕获和处理异常,我们可以确保应用程序的健壮性,并向用户提供友好的错误响应。ASP.NET Core 提供了一种机制,即异常筛选器(Exception Filters…

NLP_知识图谱_介绍、构建、问答知识

文章目录 知识图谱的介绍图图能做些什么任务基于图的推荐系统图的一些基本概念与表述有向图与无向图节点的度节点的边的数量有向图又分为入度和出度 什么是知识图谱知识图谱属于异质图知识图谱的schema知识图谱的应用场景 知识图谱的构建三元组如何构建知识图谱构建知识图谱通常…

idea中输入法被锁定如何清除

今天遇到一个问题&#xff1f;idea中输入法被锁定了&#xff0c;无论怎么切换输入法&#xff0c;切换中英文&#xff0c;在idea中输出的均为英文内容&#xff0c;该如何解决呢&#xff1f;&#xff08;idea官网&#xff1a;JetBrains: 软件开发者和团队的必备工具&#xff09; …

使用Python实现超参数调优

超参数调优是机器学习模型调优过程中的重要步骤&#xff0c;它可以帮助我们找到最佳的超参数组合&#xff0c;从而提高模型的性能和泛化能力。在本文中&#xff0c;我们将介绍超参数调优的基本原理和常见的调优方法&#xff0c;并使用Python来实现这些方法。 什么是超参数&…

Open CASCADE学习|gp_XYZ与gp_Mat

gp_XYZ和gp_Mat是Open CASCADE Technology (OCCT)中的类&#xff0c;用于处理3D几何和变换。 gp_XYZ gp_XYZ类代表了一个三维空间中的点或向量。它通过三个坐标值&#xff08;X, Y, Z&#xff09;来定义位置或方向。这个类提供了多种操作&#xff0c;比如计算两点之间的距离、…

ARM_day7:实现三个按键中断

程序代码&#xff1a; mykey.h: #ifndef __MYKEY_H__ #define __MYKEY_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h" extern void printf(const char …

【Java探索之旅】用面向对象的思维构建程序世界

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、初识面向对象1.1 什么是面向对象&#xff1f;1.2 面向对象与面向过程 二、类的定义…

Ubuntu 20.04 安装Nginx-1.25.4

操作系统&#xff1a;Ubuntu 20.04.5 LTS 软件版本&#xff1a;nginx-1.25.4 一、环境准备 安装GCC编译器 安装PCRE 安装OpenSSL 安装OpenSSL库 安装zlib库 # 安装GCC编译器&#xff08;build-essential 包会安装GCC编译器以及其他一些用于编译源代码的必须工具&#xff09;sud…

记一次kafkakerberos认证问题

1&#xff0c;报错信息 排查思路&#xff1a;检查kerberos配置文件 kerberos.kafka.principalkafka/huawe_baseSECURITY.COM kerberos.kafka.keytabPath/etc/huawe_base.keytab kerberos.kafka.krb5ConfPath/etc/krb5.conf但是查看kafka_client_jass.conf文件&#xff0c;发现…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

提升和改善学习效率和记忆力

提升和改善学习效率和记忆力是一个多方面的过程&#xff0c;需要综合考虑方法、食物、生活习惯等多个方面。以下是一些具体的建议&#xff1a; 一、方法篇 设定明确的学习目标&#xff1a;清晰的目标有助于你集中注意力&#xff0c;更有效地利用学习时间。采用多样化学习方式…

搭建Hive 3.x环境(CentOS 9 + Hadoop3.x)

零、资源准备 虚拟机相关&#xff1a; VMware workstation 16&#xff1a;虚拟机 > vmware_177981.zipCentOS Stream 9&#xff1a;虚拟机 > CentOS-Stream-9-latest-x86_64-dvd1.iso JDK jdk1.8&#xff1a;JDK > jdk-8u261-linux-x64.tar.gz Hadoop Hadoop 3.3.6&a…

BCLinux8U6系统部署oceanbase分布式数据库社区版之二、数据库服务器准备

本文是在完成步骤一、准备 OBD 中控机后的第二步&#xff0c;准备3台oceanbase分布式数据库服务器。 前序步骤&#xff1a;BCLinux8U6系统部署oceanbase分布式数据库社区版之一、准备 OBD 中控机 一、服务器配置 1、服务器硬件配置 本例采用vmware虚拟机来构建测试平台&…

前端上传照片压缩 (适合 vue vant组件的)

为什么要这样做&#xff1f; &#xff08;减小服务器压力 提升用户体验上传照片和加载照片会变快&#xff09; 最近有一个需求&#xff0c;通过手机拍照后上传图片到服务器&#xff0c;大家应该都知道&#xff0c;现在的手机像素实在是太高了&#xff0c;随便拍一张都是10M以上…

DFS的例子

x星球的盛大节日为增加气氛&#xff0c;用30台机光器一字排开&#xff0c;向太空中打出光柱。安装调试的时候才发现&#xff0c;不知什么原因&#xff0c;相邻的两台激光器不能同时打开&#xff01;国王很想知道&#xff0c;在目前这种bug存在的情况下&#xff0c;一共能打出多…

PTA 编程题(C语言)-- 统计一行文本的单词个数

题目标题&#xff1a;统计一行文本的单词个数 题目作者&#xff1a;张彤彧 浙江大学 本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个…

CSS3 立体 3D 变换

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 立体 3D 变换&#x1f48e;1 坐标轴&#x1f48e;2 perspective 透视视…

Matlab之过球面一点的平面方程

这篇文章描述2件事情&#xff1a; 1、已知球面上任意点&#xff0c;求过该点、地心、与北极点的平面方程&#xff08;即过该点的经线平面方程&#xff09;&#xff1b; 2、绕过球心的任意轴旋转平面得到新平面的方程 一、已知球面上任意点&#xff0c;求过该点、地心、与北极点…