当前位置: 首页 > news >正文

【React】二次封装Antd的Table组件

使用Table并不难,但是每次使用都会伴随着很大一部分逻辑,如loding效果、表格分页筛选排序、调接口完毕后赋值等等,使用方法基本一致,所以可以将他们二次封装,从而减少代码量,提升代码可读性。

二次封装表格

import { Table, TableProps } from "antd"
import { useFetchTableData } from "./useFetchTableData"
import { useMemo } from "react"type Props = {dataKey?: string fetchMethod: (params: {}) => Promise<any>requestParam: { size: number; search: {}[] }onParamChange: (data: any) => void[key: string]: any 
}interface DataType {}const BasicTable = ({dataKey = "data_list", // 接口响应中list对应的keyfetchMethod,requestParam,onParamChange,...resetTableProps
}: Props) => {const memoParams = useMemo(() => {return { ...requestParam }}, [requestParam]) // 避免值类型一样的对象,触发两次请求// 请求表格数据const { loading, tableData } = useFetchTableData(fetchMethod, memoParams)const onTableChange: TableProps<DataType>["onChange"] = ({ current, pageSize }, // 分页filters, // 筛选_sorter, // 排序extra // 当前table数据 以及 当前行为) => {let paramsif (extra.action === "filter") {// 触发筛选,修改searchlet search = []for (let key in filters) {if (filters[key]) {search.push({ [key]: filters[key] })}}params = { ...requestParam, page: current, size: pageSize, search }} else {params = {...requestParam,page: current,size: pageSize,}}onParamChange(params)}return (<TableborderedonChange={onTableChange}loading={loading}dataSource={tableData[dataKey]}pagination={{total: tableData.total_count,showSizeChanger: false,current: tableData.page,pageSize: requestParam.size,showTotal: (t) => <span>{t}</span>,}}{...resetTableProps}/>)
}
export default BasicTable

请求相关

import { message } from "antd"
import { useEffect, useState } from "react"interface TableData {[key: string]: any // 允许任意字符串作为键,值的类型是 anydata_list: any[]total_count: numberpage: number
}
interface Response {code: numbermessage: stringdata: any
}export function useFetchTableData(fetchMethod: (params: {}) => Promise<any>,parameter: {}
) {const [loading, setLoading] = useState(false)const [tableData, setTableData] = useState<TableData>({data_list: [],total_count: 0,page: 1,})// 获取表格数据async function fetchTableData() {try {setLoading(true)const res: Response = await fetchMethod(parameter)if (res.code === 1) {setTableData(res.data)} else {message.warning(res.message)}} finally {setLoading(false)}}useEffect(() => {fetchTableData()}, [parameter])return { loading, tableData }
}

使用

interface DataType {...
}
const columns: ColumnsType<DataType> = [...]export default () => {const getList = async (params) => {// 发送请求并将响应res返回return res}const [requestParam, setParameter] = useState({page: 1,size: 10,search: [],start_time: "",end_time: "",})const memoParameter = useMemo(() => ({ ...requestParam }), [requestParam])return (<BasicTabledataKey="data" // 这里写data意味着dataSource使用调用接口返回的res.data.data,不写这行默认为res.data.data_list,可根据需求自行更改fetchMethod={getUserlist}requestParam={memoParameter}onParamChange={(data: any) => {setParameter({ ...requestParam, ...data })}}// 下面的都会被剩余参数接收columns={columns}rowKey="id"/>)
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL注释方法 -- 单行注释/多行注释
  • 数据结构(三)循环链表
  • 【数据结构】排序算法大全(快速、堆、归并、插入、折半、希尔、冒泡、计数、基数)各算法比较、解析+完整代码
  • UE4/UE5像素流送云推流:多人访问不稳定、画面糊、端口占用多等
  • 3D Slicer:从入门到精通——数据模块之DICOM
  • 【C语言】结构体内存对齐:热门面试话题
  • day15
  • 百度 提前批 国际化广告部 (深圳-机器学习/数据挖掘/自然语言处理工程师) 一面+二面面经
  • 记录centos中操作(查找、结束、批量)进程以及crontab定时写法的知识
  • 数据库SQL语言实战(十)(最后一篇)
  • c++ set/multiset容器
  • 大数据智慧消防解决方案(24页PPT)
  • 【华为OD机试-C卷D卷-200分】二叉树的广度优先遍历(C++/Java/Python)
  • LLM中的RoPE位置编码代码解析与RoPE的性质分析(一)
  • 亲测使用frp获得访问者真实ip
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Docker 笔记(2):Dockerfile
  • egg(89)--egg之redis的发布和订阅
  • HTTP中的ETag在移动客户端的应用
  • 复杂数据处理
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 面试总结JavaScript篇
  • 七牛云假注销小指南
  • 强力优化Rancher k8s中国区的使用体验
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 事件委托的小应用
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 阿里云ACE认证学习知识点梳理
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #if和#ifdef区别
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (k8s)Kubernetes本地存储接入
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (九)One-Wire总线-DS18B20
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)汇编语言——简单程序
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉)JSON.stringify 语法实例讲解
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net 8.0 新的变化
  • .NET Core跨平台微服务学习资源
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET多线程执行函数
  • .NET周刊【7月第4期 2024-07-28】
  • /etc/fstab和/etc/mtab的区别
  • /etc/skel 目录作用
  • @Value读取properties中文乱码解决方案
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429