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

2024-05-27 18:04

本文主要是介绍【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"/>)
}

这篇关于【React】二次封装Antd的Table组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008203

相关文章

CSS3 布局样式及其应用举例

《CSS3布局样式及其应用举例》CSS3的布局特性为前端开发者提供了无限可能,无论是Flexbox的一维布局还是Grid的二维布局,它们都能够帮助开发者以更清晰、简洁的方式实现复杂的网页布局,本文给... 目录深入探讨 css3 布局样式及其应用引言一、CSS布局的历史与发展1.1 早期布局的局限性1.2

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言