Antd Table 表格 拖拽列宽

2024-06-22 21:12
文章标签 表格 table 拖拽 antd 列宽

本文主要是介绍Antd Table 表格 拖拽列宽,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

antd 的表格组件的列宽,是通过width属性去初始化的,有时候渲染的内容不固定,这个宽做不到通用所以研究怎么实现表格列宽拖动,主要的实现步骤如下:

  1. 使用table的components API修改表格头部为 react-resizable提供的组件
  2. 并在columns设置侦听函数,用于动态修改宽度 (onHeaderCell API)
  3. 还需要设置css,让控制组件显示在正确位置

在实际的应用中,Table组件直接再次封装为可以拖动的组件供所有人使用,而且拖动后的布局是可以本地存储的,或者用接口去存也是一样,实现效果如下
在这里插入图片描述

下面是实现的具体代码,封装了一个MyTable 组件,在这个组件中可以自定义antd Table组件的交互样式等

1、安装插件
npm install react-resizable
2、写MyTable组件

目录结构
在这里插入图片描述

这里使用了.tsx 来写,里面的校验随便写的 方便大家看,同文件夹下的ResizableTitle.tsx 文件就是自定义的表头,通过antd Table组件的components重写表格,每次拖动中不断更新表格的布局不断渲染,看起来就是一个连续的过程

// Mytable/index.tsx
import { Table } from 'antd';
import { useState } from 'react';import ResizableTitle from './ResizableTitle'
import './index.css'export default function MyTable(){const [columns, setColumns] = useState([{title: 'Date',dataIndex: 'date',width: 200,},{title: 'Amount',dataIndex: 'amount',width: 100,sorter: (a, b) => a.amount - b.amount,},{title: 'Type',dataIndex: 'type',width: 100,},{title: 'Note',dataIndex: 'note',width: 100,},{title: 'Action',key: 'action',render: () => <a>Delete</a>,},]);const dataSource = [{key: 0,date: '2018-02-11',amount: 120,type: 'income',note: 'transfer',},{key: 1,date: '2018-03-11',amount: 243,type: 'income',note: 'transfer',},{key: 2,date: '2018-04-11',amount: 98,type: 'income',note: 'transfer',},];const mergeColumns:any = columns.map((col, index) => {return {...col,onHeaderCell: (column:any) => ({width: column.width,onResize: (_:any, { size }: any) => {const newColumns = [...columns];newColumns[index] = {...newColumns[index],width: size.width,};setColumns(newColumns);},}),}});return (<Tablecomponents={{header: {cell: ResizableTitle,},}}columns={mergeColumns}dataSource={dataSource}/>);
}
// Mytable/ResizableTitle.tsx
import { Resizable } from 'react-resizable';export default function ResizableTitle(props:any){const { onResize, width, ...restProps } = props;return (! width ?<th {...restProps} />: <Resizablewidth={width}height={0}handle={<spanclassName="react-resizable-handle"onClick={e => {e.stopPropagation();}}/>}onResize={onResize}draggableOpts={{ enableUserSelectHack: false }}><th {...restProps} /></Resizable>);
};
/* Mytable/index.css */
.react-resizable { position: relative;background-clip: padding-box;} .react-resizable-handle { position: absolute;right: -5px;bottom: 0;z-index: 1;width: 10px;height: 100%;cursor: col-resize;}
3、其他说明

作者在使用该方法的时候遇到性能不佳,出现了明显的卡顿现象,一时没查到原因,因为是在业务组件中使用,表格非常大,而且有很多其他的渲染,电脑的性能也有限,卡成了PPT,作了以下调整,下面是简单的讲解这个过程:

  1. 不再使用mergeColumns,不停的去渲染Table组件,每次只与普通表格一样只渲染一次
  2. 直接操作DOM,在onResize中找到计算鼠标拖动的距离,通过类名的形式找到table 的布局器并改变宽度在这里插入图片描述

这篇关于Antd Table 表格 拖拽列宽的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

GORM中Model和Table的区别及使用

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

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

如何利用Python实现给Excel表格截图

《如何利用Python实现给Excel表格截图》这篇文章主要为大家详细介绍了如何利用Python实现给Excel表格截图功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 我搜索了网络上的方案,感觉把 Excel 表格转换为 html 再用 platwright 截图是比China编程较顺

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of