基于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

相关文章

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。