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

一般情况下,我们在页面组件里面都会使用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.mzph.cn/news/824307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF——[GXYCTF2019]BabyUpload

BUUCTF——[GXYCTF2019]BabyUpload 1.上传嘛&#xff0c;直接丢正常的jpg文件进服务器 2.发现可以正常上传&#xff0c;并且回显出来啦文件上传的路径 /var/www/html/upload/7df22610744ec51e9cb7a8a8eb674374/1111.jpg 3.尝试上传一句话木马 <?php eval($POST[123456]…

HDFS详解(Hadoop)

Hadoop 分布式文件系统&#xff08;Hadoop Distributed File System&#xff0c;HDFS&#xff09;是 Apache Hadoop 生态系统的核心组件之一&#xff0c;它是设计用于存储大规模数据集并运行在廉价硬件上的分布式文件系统。 1. 分布式存储&#xff1a; HDFS 将文件分割成若干块…

「 网络安全常用术语解读 」漏洞利用交换VEX详解

漏洞利用交换&#xff08;Vulnerability Exploitability eXchange&#xff0c;简称VEX&#xff09;是一个信息安全领域的标准&#xff0c;旨在提供关于软件漏洞及其潜在利用的实时信息。根据美国政府发布的用例(PDF)&#xff0c;由美国政府开发的漏洞利用交换(VEX)使供应商和用…

工业电脑在ESOP工作站行业应用

ESOP工作站行业应用 项目背景 E-SOP是实现作业指导书电子化&#xff0c;并统一管理和集中控制的一套管理信息平台。信迈科技的ESOP终端是一款体积小巧功能齐全的高性价比工业电脑&#xff0c;上层通过网络与MES系统连接&#xff0c;下层连接显示器展示作业指导书。ESOP控制终…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.5版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架&#xff0c;超轻量级、高度提炼&#xff0c;一套API优雅支持UDP 、TCP 、WebSocket 三种协议&#xff0c;支持iOS、Android、H5、小程序、Uniapp、标准Java平台&#xff0c;服务端基于Netty编写。 工…

朗思-我的家园正式上线:朗思科技Agent工具软件--人人拥有“Ai-机器人”

4月16日&#xff0c;朗思科技正式发布"朗思-我的家园"。朗思科技是国内领先的Ai Agent智能自动化工具软件产品及方案的提供商&#xff0c;始终坚持自主研发&#xff0c;全面支持国产信创&#xff0c;不断加快产品创新迭代。基于技术领先性和战略前瞻性&#xff0c;其…

【小白学机器学习13】一文理解假设检验的反证法,H0如何设计的,什么时候用左侧检验和右侧检验,等各种关于假设检验的基础知识

目录 前言&#xff1a; 目标 1 什么叫 假设检验 1.1 假设检验的定义 1.1.1 来自百度百科 1.1.2 维基百科 1.2 假设检验的最底层逻辑&#xff1a;是反证法思想 1.3 假设检验的底层构造&#xff1a;小概率反证法思想 2 什么叫反证法 2.1 反证法的概念 2.1.1 来自百度…

MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中&#xff0c;通过鼠标操作获取坐标并在CPictureCtrl控件中使用Lin…

通过Idea部署Tomcat服务器

1.在idea中创建项目 有maven构建工具就创建maven&#xff0c;没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意&#xff1a;创建web项目后我们需要配置tomcat才能运行&#xff0c;下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…

小程序如何优化搜索排名,获取曝光

在移动互联网时代&#xff0c;小程序以其便捷、轻量级的特点&#xff0c;逐渐成为用户获取服务的重要渠道。然而&#xff0c;小程序数量众多&#xff0c;如何让自己的小程序在搜索中脱颖而出&#xff0c;获取更多的曝光和流量&#xff0c;成为众多开发者关注的焦点。 一、理解…

DC-8渗透测试复现

DC-8渗透测试复现 目的&#xff1a; 获取最高权限以及flag 过程&#xff1a; 信息打点--sql注入- 命令执行反弹shell-exim4提权 环境&#xff1a; 攻击机&#xff1a;kali(192.168.85.137) 靶机&#xff1a;DC_3(192.168.85.140) 复现&#xff1a; 一.信息收集 nmap -…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET&#xff0c;是一款基于fastreport报表开发控件的商业图形库&#xff0c;借助 FastReport 商业图形库&#xff0c;您可以可视化不同的分层数据&#xff0c;构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

编译OpenWRT固件

前言 编译环境&#xff0c;我是使用Ubuntu16.04.07 LTS 64位版 1.安装Ubuntu16.04.07 LTS 64 Ubuntu16.04.07 LTS 64安装的时候会出现一个bug&#xff0c;如果开始安装界面选了中文之后就会出现 提示错误信息&#xff1a;无法安装busybox-initramfs&#xff0c;向目标系统中…

openlayers 入门教程(六):controls 篇

目录 一、常用的控件 二、使用控件方法 三、添加删除control 的基本方法 四、control示例 1 比例尺 - ScaleLine 2 鹰眼/缩小图 - OverviewMap 3 全屏 - FullScreen 4 版权信息 - Attribution 5 旋转地图 - Rotate 6 放大缩小 - Zoom 7 缩放滑块控件 - ZoomSlider …

【Day 1】HTML 与 CSS

1 前端 网站的工作流程&#xff1a; 首先我们需要通过浏览器访问发布到前端服务器中的前端程序&#xff0c;这时候前端程序会将前端代码返回给浏览器浏览器得到前端代码&#xff0c;此时浏览器会将前端代码进行解析&#xff0c;然后展示到浏览器的窗口中&#xff0c;这时候我…

51-41 Stable Video Diffusion,高质量视频生成新时代

23年11月&#xff0c;Stability AI公司公开了稳定视频扩散模型Stable Video Diffusion(SVD)的代码和权重&#xff0c;视频生成迎来了新时代。SVD是一种潜在扩散模型&#xff0c;支持文本生成视频、图像生成视频以及物体多视角3D合成。从工程角度来看&#xff0c;本文主要提出了…

Real3DPortrait照片对口型,数字人,音频/视频驱动数字人

先看效果 上传一张图片和一段音频&#xff0c;照片如下&#xff1a; 合成后效果如下&#xff1a; 照片对口型-音频驱动 支持音频驱动和视频驱动&#xff0c;视频可以使照片有参照视频中的口型和和动作。 项目地址 https://github.com/yerfor/Real3DPortrait 我的环境 win…

真有立即做出40+BI零售数据分析报表的方案?

有&#xff0c;奥威BI零售数据分析方案是一套标准化的BI方案&#xff0c;预设零售数据分析模型和BI报表&#xff0c;点击应用后&#xff0c;将自动从系统中取数&#xff0c;并根据方案的预设计算分析指标、分析数据&#xff0c;并生成让人快速理解数据情况的BI数据可视化报表。…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala&#xff08;可选&#xff09; Java Hadoop.dll&#xff08;可能需要&#xff0c;具体看有无相关错误信息&#xff09; hadoop-lzo-0.xx.xx.jar&#xff08;如果你的版本过高&#xff0c;需要到官网下载高版本&#xff0c;mvnrepository仓…

服务器中毒怎么办?企业数据安全需重视

互联网企业&#xff1a; 广义的互联网企业是指以计算机网络技术为基础&#xff0c;利用网络平台提供服务并因此获得收入的企业。广义的互联网企业可以分为:基础层互联网企业、服务层互联网企业、终端层互联网企业。 狭义的互联网企业是指在互联网上注册域名&#xff0c;建立网…