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

相关文章

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 、显卡、内存等一些硬件元件。

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

哈希表的封装和位图

文章目录 2 封装2.1 基础框架2.2 迭代器(1)2.3 迭代器(2) 3. 位图3.1 问题引入3.2 左移和右移?3.3 位图的实现3.4 位图的题目3.5 位图的应用 2 封装 2.1 基础框架 文章 有了前面map和set封装的经验,容易写出下面的代码 // UnorderedSet.h#pragma once#include "HashTable.h"

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b