关键字:react-resizable、antd-table、拖拽、多级表头、可变列宽

  • react-resizablehttps://github.com/react-grid-layout/react-resizable

  • antd-tablehttps://ant-design.gitee.io/components/table-cn/#components-table-demo-fixed-header

先看效果:

上代码:

第一步:在项目中安装react-resizable

npm i react-resizable -S

第二步:基于antd的table组件、进行封装、代码如下:

注意点:

1、替换掉antd-table的原有的header

2、使用递归、给每个表头添加resize的事件、以及处理resize之后的宽度设置

import React, { useState, useEffect } from 'react';
import { Table } from 'antd';
import { Resizable } from 'react-resizable';
import './resizeAble.scss';const components = {header: {cell: (props) => {const { onResize, width, ...restProps } = props;if (!width) {return <th {...restProps} />;}return (<Resizable width={width} height={0} onResize={onResize}><th {...restProps} /></Resizable>);},},
};function modifyDeepTreeNodeValueFn({ colList, modifyObj, indexes }) {let colList_ = colList;let tempArr = [...colList_];function modifyDeepTreeNodeValue(indexes) {const indexLen = indexes.length;for (let i = 0; i < indexLen; i++) {const index_ = indexes[i];if (i < indexLen - 1) {const targetArr = tempArr[index_];if (!targetArr) {break;}tempArr = (tempArr[index_] && tempArr[index_].children) || [];} else {const target = tempArr[index_];if (!target) {break;}tempArr[index_] = {...target,...modifyObj,};}}}if (indexes.length === 1) {const index_ = indexes[0];colList_[index_] = {...colList_[index_],...modifyObj,};return colList_;}modifyDeepTreeNodeValue(indexes);return colList_;
}export default function ResizeTable(props) {const [selfColumns, setSelfColumns] = useState([]);const { columns } = props;useEffect(() => {setSelfColumns([...columns]);}, [columns]);const handleResize = (indexes) => {return (e, d) => {const { width } = d.size;const nextColumns = modifyDeepTreeNodeValueFn({colList: selfColumns,modifyObj: { width },indexes,});console.log(nextColumns);setSelfColumns([...nextColumns]);};};const setColumnsResizeable = (cols, indexes = []) => {return [...cols].map((colItem, index) => {const { children, width } = colItem;const currentIndexes = [...indexes, index];const children_ = Array.isArray(children)? setColumnsResizeable(children, currentIndexes): null;return {...colItem,onHeaderCell: () => ({width,onResize: handleResize(currentIndexes),}),children: children_,indexes: currentIndexes,};});};const columns_ = setColumnsResizeable(selfColumns);console.log(columns_);return <Table {...props} columns={columns_} components={components} />;
}

第三步:使用组件:

import React from 'react';
import ResizeTable from './components/resizeTable';
import tableData from './tableData.json';
import columns from './columns.json';export default function resizeAbleTablePage() {return (<ResizeTabledataSource={tableData}columns={columns}borderedrowKey="id"scroll={{ x: '100%' }}/>);
}

注意:scroll={{ x: '100%' }}需要写、代表自动根据父元素来限制宽度,不写的话,拖拽改变列宽是不会生效的

antd-table结合react-resizable实现多级表头可拖拽表格相关推荐

  1. iview+vue实现表头的拖拽功能

    一.项目需求: 需求:表格实现表头拖拽.排序.树形表格展示.下载Excel.下载CSV格式的数据 项目里用到的技术:iview的table+vue 参考文章:https://www.cnblogs.c ...

  2. React antd Table 实现单元格点击 表头斜线分组等功能

    先上成品示意图: 几个关键步骤: 一 定义数据结构: export const data = [{key: 'row1',beforeUpdateLevel: '等级1',level_1: '保',l ...

  3. antd vue的modal可拖拽指令,包括表头拖拽和表体拖拽

    项目需要使用antd-vue的modal可以拖拽,然后在网上搜了一下方法, 有一个老哥写了个方法 链接在这: https://blog.csdn.net/baidu_20264113/article/ ...

  4. React 拖拽改变大小,react-resizable 属性详解

    源于布局需求,要求Antd的Layout组件中,侧边栏Sider可以拖拽改变宽度-- 开源插件,基于react-draggable插件(同一作者),详见<react-resizable>: ...

  5. 利用jQuery UI为CMS网站实现拖拽布局效果,秒杀table布局

    1 实现效果 对于使用过CMS系统制作网站的人应该都清楚,制作网站过程有一个重要的步骤就是制作页面布局.目前,实现页面布局有两种方式:table与div.这两种方式各有其优劣之处. Table: 优势 ...

  6. excel怎么把竖排变成横排_excel:斜线表头的制作方法,并且拖拽也不变形,值得收藏...

    我们是Excel技术控,大家看完文章喜欢的话,可以关注下.谢谢支持. 在excel的使用过程中,经常要制作单斜线表头,双斜线表头,以及多斜线表头,实际都不难.一个痛点是,斜线表头的在拖拽,也就是列宽变 ...

  7. Vue3 使用AntDisignVue,table表拖拽

    vue版本, AntDisign的table表拖拽,需要付费,或者有,我并没找到所以封装了个简单的table拖拽. 使用场景: 使用拖拽一般是为了排序,所以场景就是对列表数据进行排序. 文章目录 注意 ...

  8. antd table动态表头_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...

    1.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本以前都存在,反正3.16.2版本是存在这个问题的,若是是3.24.0以前的版本估计只能经过修改css样式解决.css 按照官网说的 ...

  9. antd 设置表头属性_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...

    一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...

最新文章

  1. 分步骤学习自动化测试
  2. 配置CAS应用客户端
  3. 微信小程序开发2——数据绑定、控制属性
  4. Schedule Problem spfa 差分约束
  5. Fedora 与 Ubuntu 深度比较
  6. C++ string assign()赋值常用方法
  7. 卢伟冰宣布Redmi新机即将发布 疑为Redmi 8A
  8. 拼多多被指洗钱 官方回应:将起诉“差评”并索赔1000万元
  9. 计算机辅助设计工业产品cad竞赛试题,2017工业产品设计CAD比赛试题
  10. tableau示例超市数据在哪儿_Tableau | 超市销售数据可视化分析
  11. 基于eNSP的千人规模冗余型企业/校园网络设计与规划(可以自己按步骤实现)
  12. Linux:CentOS 7 解压 7zip 压缩的文件
  13. matlab设置保存图像分辨率_matlab saveas 分辨率
  14. Android 源码编译详解【一】:服务器硬件配置及机型推荐-2016/06
  15. mysql存储表情字符_MySQL 存储表情字符
  16. OTL电路与OCL功放电路的区别
  17. 【Lilishop商城】No3-2.模块详细设计,系统设置(系统配置、行政区划、物流公司、滑块验证码图片、敏感词过滤)的详细设计
  18. scrollView 横向
  19. 用html制作搜狗搜索,详解基于搜狗搜索开发的微信公众号的爬虫系统(C#)
  20. 创业期间,应该怎么样坚持下去?如何从容面对困难?

热门文章

  1. debug版没有问题而release版本崩溃的解决方法探究
  2. 随机解调-多频点信号与伪随机序列混频
  3. WordPress文章配图插件好用不?
  4. ftp启动关闭重启命令
  5. 2013年12月2日 周一
  6. PyQt5项目:抠图
  7. shell开启飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能
  8. 泛函分析 03.01 内积空间与Hilbert空间-内积空间的基本性质
  9. 互联网明争暗斗 2009:在血色江湖中“蜗居”
  10. python缩进格式错误修改病句_python缩进错误,求教。