Ant Design + react-resizable实现列表页可拖拽宽度变化

查找了下Ant Design中的Table组件,没有发现表格header列头可以拖拽实现宽度变化的功能,领导要想要这种效果,看了下当前的WEB的 第三方UI,可能只有Material-UI支持

import { DataGridPro, GridToolbar } from '@mui/x-data-grid-pro';

但是Material-UI中的 DataGridPro在包'@mui/x-data-grid-pro'中,'@mui/x-data-grid-pro'对于React的最低版本支持是React 17,由于项目属于之前的项目,基础框架的迭代和代码重构没有在当前日程中,所以只能对Ant Design的Table进行改造

react-resizable 可以满足当前的需求,接下来便是对 react-resizable + Ant Design Table的整合封装。

代码如下:组件封装

import React from 'react';
import { Table } from 'antd';
import { Resizable } from 'react-resizable';
import 'react-resizable/css/styles.css';
import './index.css'const ResizeableTitle = (props) => {const { onResize, width, ...restProps } = props;if (!width) {return <th {...restProps} />;}return (<Resizablewidth={width?width:null}height={0}minConstraints={[50, 50]}onResize={onResize}draggableOpts={{ enableUserSelectHack: false }}><th {...restProps} /></Resizable>);
}class DragTable extends React.Component {constructor(props) {super(props);this.state = {columns: this.props.columns}}static getDerivedStateFromProps(nextProps, prevState) {return null;}components = {header: {cell: ResizeableTitle,},};handleResize = index => (e, { size }) => {this.setState(({ columns }) => {const nextColumns = [...columns];nextColumns[index] = {...nextColumns[index],width: size.width?size.width:'100%',};return { columns: nextColumns };});}render() {const { components, columns, ...others } = this.props;const newColumns = this.state.columns.map((col, index) => ({...col,onHeaderCell: column => ({width: column.width?column.width:100, // 100 没有设置宽度可以在此写死 例如100试下onResize: this.handleResize(index),}),})) return (<Table components={this.components}columns={newColumns}{ ...others }></Table>)}
}export default DragTable;

值得注意的是‘const { components, columns, ...others } = this.props;’ 这里是排除原有的components和columns, 使用我们改造过后的components和columns。

import React from 'react';
import DragTable from '../../components/DragTable';class APP extends React.Component {constructor(props) {super(props);this.state = {loading: false,data: []}}render() {const columns = [{ title: 'name', dataIndex: 'name', key: 'name', ellipsis: true },{ title: 'value', dataIndex: 'value', key: 'value', ellipsis: true }]return (<DragTable columns={columns}loading={this.state.loading}rowKey='id'dataSource={this.state.data}size='small'pagination={false}style={{marginTop: 10}}rowClassName={(record, index) => {}}></DragTable>);}
}

使用,跟Ant Design 中的Table使用一样, 原有的参数、配置,函数都像之前一样正常使用

自定义,可错拽区域或者样式,使用handle参数 handle 可以是一个HTMLElement元素,

<Resizable
            width={width?width:null}
            height={0}
            minConstraints={[50, 50]}
            onResize={onResize}
            draggableOpts={{ enableUserSelectHack: false }}
            >
            <th {...restProps} />
        </Resizable>

还有一种方法:重定义react-resizable-handle 的样式

.react-resizable-handle-se {top: 0;right: 0;cursor: w-resize;
}.react-resizable-handle {position: absolute;width: 10px;height: calc(100% - 10px);background-repeat: no-repeat;background-origin: content-box;box-sizing: border-box;background-image: none;background-position: bottom right;border-right: 1px solid #f0f0f0;margin: 5px 0px;padding: 0px;
}

对于  的参数和配置可以参考官方说明:react-resizable - npmhttps://www.npmjs.com/package/react-resizable 

Ant Design + react-resizable实现列表页可拖拽宽度变化相关推荐

  1. ant design vue pro 支持多页签模式 页签可以缓存

    ant design vue pro 支持多页签模式 页签可以缓存 代码贴在最后 启动之后页面是这样的: 第一步:修改 src/layouts/BasicLayout.vue 文件,在该文件中添加mu ...

  2. React + Ant Design Pro项目实现keep-alive页签

    背景 PC端管理系统,采用 ant design pro 方案,它是阿里的一个管理系统框架,技术栈是react. 相比vue,react一个先天不足是不支持 keep-alive,所以管理系统中的多页 ...

  3. Redux案例-基于Ant Design React

    1.Ant Design介绍和环境初始化 Ant Design是一套面向企业级开发的UI框架,视觉和动效作的很好.阿里开源的一套UI框架,它不只支持React,还有ng和Vue的版本,我认为不论你的前 ...

  4. Ant design vue pro 添加多页签

    1.修改模板 /src/layouts/BasicLayout.vue 添加如下代码 第一处: <!-- layout content --><a-layout-content :s ...

  5. 弹窗案例实现(Ant Design + React hooks)

    Ant Design 是React里常用的UI框架 我们选用的是Ant Design 的 Modal 我们可以从Ant Design 官网看到一个基本的弹框大致长这个样子 一个弹框,大概需要弹框名称, ...

  6. Ant Design Vue中tabs标签页切换导致页面变宽的问题

    问题 在使用Ant Design Vue进行开发的时候,使用了tabs标签页,在页里面套用了表格,但是在页面切换后,会发现页面的width会变大差不多2倍,这样会导致页面一些结构的样式发生变化. 解决 ...

  7. React基于antd Table实现可拖拽调整列宽的表格

    实现功能 1:表格列宽初始自动分配.列宽总和不能超过容器宽度(无横向滚动条,公司项目特殊需求) 2:当容器宽度变化时,保持当前列宽的分配比例,等比缩小 3:拖动过程中不进行列宽的调整,只有释放之后再进 ...

  8. 带你封装一个上传图片组件(ant design+react)

    目录 需求实现 实现效果 代码封装 UploadImage组件 备注 BaseUploadImage组件 index.less 样式文件 父组件引用 需求实现 1可以支持上传最多九张图片 2图片支持预 ...

  9. ant design pro,删除最后一页退回上一页

    首先需要三个变量,分别是删除后的总数以及页码还有每页条数: var nowDatasSize: number = -1var currentPage: number = 1;var pageSize: ...

最新文章

  1. flink写入hive的时区问题
  2. DIV+CSS 入门
  3. jquery实现饼图统计图表
  4. [七月挑选]Tomcat使用命令行启动之指定jdk版本
  5. oracle hibernate 主键,oracle hibernate 主键自增
  6. 论文阅读04:Deep Triplet Hashing Network for Case-based Medical Image Retrieval
  7. 如何查看某个查询用了多少TempDB空间
  8. MySQL内存及虚拟内存优化设置
  9. 万能显卡驱动win7_驱动工具更新!完美支持苹果电脑驱动
  10. 人物抠图(Photoshop技巧系列)
  11. 基于websocket单台机器支持百万连接分布式聊天(IM)系统
  12. keil5写c语言的步骤,keil5使用C51的详细步骤讲述
  13. 【从零开始的OpenGL学习】1. 配置OpenGL,绘制最简单的一个三角形,HelloWorld(学习笔记)
  14. Excel如何快速录入甲乙丙丁序列
  15. 08 SCLSDA,类IIC协议(附源码)
  16. SaaSpace:11 款最佳免费备份软件工具
  17. Linux中离线安装R语言程序包
  18. 洋酒销售系统的设计与实现(附源码+资料+论文+截图+数据库)
  19. Wish封店的原因有哪些?
  20. matlab抗混叠滤波器,音频抗混叠滤波器设计

热门文章

  1. hig规范_Unix Shell的人机接口指南(HIG)
  2. 安科瑞开口式剩余电流互感器在改造项目中的应用(卓宋兰)
  3. 看我怎么把别人的女朋友搞到手的(二)
  4. 图像特征分析(一):颜色特征描述,颜色矩,颜色直方图(附matlab代码)
  5. 2020年7月份所有文章汇总
  6. win7资源管理器左边导航栏中的“库”和“Administrator”文件夹删掉
  7. 什么样的产品 网站值得我们坚持下去?
  8. 程序员腰椎和颈椎问题 健康最重要
  9. hive日期函数 整理
  10. 关于编辑C语言代码中间位置时每次输入都被替换的解决方案