基于Ant Design的Table组件封装

2024-08-29 06:12
文章标签 封装 组件 ant design table

本文主要是介绍基于Ant Design的Table组件封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        可以帮助在项目中更方便地复用和管理表格。下面提供jsx和tsx两种类型的:


1、首先,在你的src/components目录下创建CustomTable.jsx文件,用于封装Table组件。

import React, { useState, useEffect } from 'react';
import { Table, Spin } from 'antd';
import PropTypes from 'prop-types';const CustomTable = ({columns,fetchData,     // 一个用于获取数据的函数pagination,    // 分页配置rowKey,        // 每行的唯一标识...restProps   // 其他Table组件的props
}) => {const [data, setData] = useState([]);const [loading, setLoading] = useState(false);const [currentPagination, setCurrentPagination] = useState({current: 1,pageSize: 10,total: 0,...pagination,});// 获取数据const loadData = async (paginationConfig = currentPagination) => {setLoading(true);try {const response = await fetchData(paginationConfig);setData(response.data);setCurrentPagination({...paginationConfig,total: response.total,});} catch (error) {console.error('Error fetching table data:', error);} finally {setLoading(false);}};// 页面加载时和分页、排序、过滤条件改变时触发数据加载useEffect(() => {loadData();}, [currentPagination.current, currentPagination.pageSize]);const handleTableChange = (pagination) => {setCurrentPagination({...currentPagination,current: pagination.current,pageSize: pagination.pageSize,});};return (<Spin spinning={loading}><Tablecolumns={columns}dataSource={data}pagination={currentPagination}onChange={handleTableChange}rowKey={rowKey}{...restProps}/></Spin>);
};CustomTable.propTypes = {columns: PropTypes.array.isRequired,fetchData: PropTypes.func.isRequired,pagination: PropTypes.object,rowKey: PropTypes.string.isRequired,
};export default CustomTable;

2、TS格式封装

import React, { useState, useEffect } from 'react';
import { Table, Spin, TableProps, PaginationConfig } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { TablePaginationConfig } from 'antd/es/table';
import { AxiosResponse } from 'axios';  // 假设你用的是 axios 来获取数据,可以根据你的情况替换interface CustomTableProps<T> extends Omit<TableProps<T>, 'columns' | 'dataSource'> {columns: ColumnsType<T>;fetchData: (pagination: TablePaginationConfig) => Promise<AxiosResponse<{ data: T[]; total: number }>>;pagination?: PaginationConfig;rowKey: string;
}const CustomTable = <T extends object>({columns,fetchData,pagination,rowKey,...restProps
}: CustomTableProps<T>): JSX.Element => {const [data, setData] = useState<T[]>([]);const [loading, setLoading] = useState(false);const [currentPagination, setCurrentPagination] = useState<TablePaginationConfig>({current: 1,pageSize: 10,total: 0,...pagination,});// 获取数据const loadData = async (paginationConfig = currentPagination) => {setLoading(true);try {const response = await fetchData(paginationConfig);setData(response.data.data);setCurrentPagination({...paginationConfig,total: response.data.total,});} catch (error) {console.error('Error fetching table data:', error);} finally {setLoading(false);}};useEffect(() => {loadData();}, [currentPagination.current, currentPagination.pageSize]);const handleTableChange = (pagination: TablePaginationConfig) => {setCurrentPagination({...currentPagination,current: pagination.current,pageSize: pagination.pageSize,});};return (<Spin spinning={loading}><Table<T>columns={columns}dataSource={data}pagination={currentPagination}onChange={handleTableChange}rowKey={rowKey}{...restProps}/></Spin>);
};export default CustomTable;

3. 说明

  • 泛型 T: 使得 CustomTable 组件能够处理不同的数据结构。你可以使用 <CustomTable<DataType>> 来指定表格的行数据类型。
  • fetchData 函数: 接收分页配置并返回一个包含数据和总数的 Promise。你可以根据实际情况修改数据获取的方式。
  • columns: 表格的列配置。
  • rowKey: 指定表格行的唯一标识属性。

可以根据需求进一步扩展这个 CustomTable 组件,比如:

  • 添加更多的数据处理逻辑,比如排序、过滤等。
  • 添加行选择、批量操作等功能。
  • 集成更多的 UI 特性,如自定义行样式、行操作按钮等。

这篇关于基于Ant Design的Table组件封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1117071

相关文章

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A