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

相关文章

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态