首页 > 其他分享 >Antd ProTable 设置表格头,可拖动变换列宽度

Antd ProTable 设置表格头,可拖动变换列宽度

时间:2024-03-19 14:46:27浏览次数:27  
标签:index const 拖动 width setColumns ProTable Antd newColumns columns

ProTable 表格本身是不支持,列宽度可拖动的。

1、按照一个插件( react-resizable)npm install --save react-resizable

2、新建一个工具类ResizableTableUtil.js

import React from 'react';
import { Resizable } from 'react-resizable';

const ResizableTitle = (props) => {
    const { onResize, width, ...restProps } = props;
  
    if (!width) {
      return <th {...restProps} />;
    }
  
    return (
      <Resizable
        width={width}
        height={0}
        handle={
          <span
            className="react-resizable-handle"
            onClick={(e) => {
              e.stopPropagation();
            }}
          />
        }
        onResize={onResize}
        draggableOpts={{ enableUserSelectHack: false }}
      >
        <th {...restProps} />
      </Resizable>
    );
  };
  
  export const components = {
    header: {
      cell: ResizableTitle,
    },
  };

  export const getMergeColumns = (columns,setColumns) =>{
    const mergeColumns = columns.map((col, index) => ({
        ...col,
        onHeaderCell: (column) => ({
            width: column.width,
            onResize: handleResize(
                index,
                columns,
                (value) => setColumns(value)
            ),
        }),
      }));
    return mergeColumns
  }
  
  export const handleResize = (index, columns, setColumns) => (_, { size }) => {
    const newColumns = [...columns];
    newColumns[index] = {
      ...newColumns[index],
      width: size.width,
    };
    setColumns(newColumns);
  };

 2、使用

import {components,getMergeColumns} from './ResizableTableUtil';

const data = [{name:"123",age:123,name:"456",age:111}]/* 你的数据源 */;

const MyProTable = () => {
  const [columns, setColumns] = useState([
    {
        title: 'Date',
        dataIndex: 'date',
        width: 200,
    },   
    {
        title: 'Note',
        dataIndex: 'note',
        width: 100,
    },
    {
        title: 'Action',
        key: 'action',
        render: () => <a>Delete</a>,
    },
]);
  const mergeColumns = getMergeColumns(columns,setColumns)
  return (
    <ProTable
      columns={mergeColumns}
      dataSource={data}
      components={components}
    />
  );
};

  最终效果:

 

标签:index,const,拖动,width,setColumns,ProTable,Antd,newColumns,columns
From: https://www.cnblogs.com/wwssgg/p/18082786

相关文章

  • antd 的selectRowkeys 换变量名不生效了
    如果在AntDesign的ProTable中尝试更改selectedRowKeys的属性名(例如换成其他名字),可能会导致无法正确地管理表格行的选中状态。在ProTable中,selectedRowKeys是一个特定的属性名,用于表示当前选中的行的keys列表。如果你需要将selectedRowKeys更改为其他属性名,可以通过......
  • 可编辑表格中的两个列分别是用react-hook-form 和antd的inputNumber实现的,需要在开始
    可编辑表格中的两个列分别是用react-hook-form和antd的inputNumber实现的,需要在开始时间的列输入后失焦时,或者按enter键,鼠标聚焦到下一列,即结束时间,该如何设置在React项目中,要实现在一个可编辑表格中,当开始时间列输入后失焦或按下Enter键时,自动将焦点切换至结束时间列,你可以结合......
  • 使用 Ant Design(Antd)创建精美的界面
    使用AntDesign(Antd)创建精美的界面AntDesign(简称Antd)是一个流行的ReactUI组件库,提供了丰富多样的组件,使得开发人员能够快速构建漂亮的用户界面。在本篇博客中,我们将介绍Antd的基本使用方法,并展示一些常用组件的示例。按钮Antd提供了多种按钮样式,用于满足不同的......
  • React Antd 的ProTable 如何默认展开树结构
    1、defaultExpandAllRows:true  defaultExpandAllRows设为true就可以了<ProTablerowKey="key"columns={rightBomColumnArr}dataSource={rightBomTableTreeData}......
  • vueusejs实现拖动
    https://www.vueusejs.com/guide/ npmi-D@vueuse/nuxt@vueuse/corepnpmadd-D@vueuse/nuxt@vueuse/core定义变量constcontentParent=ref();定义div<divclass="lg:flexoverflow-autoh-6/6w-[calc(100%+1rem)]"ref=&quo......
  • vue3 监听鼠标点击拖动事件,移动端滑动事件,页面指针坐标事件
    PointerEventsAPI是Hmtl5的事件规范之一,它主要目的是用来将鼠标(Mouse)、触摸(touch)和触控笔(pen)三种事件整合为统一的API。Pointer指可以在屏幕上反馈一个指定坐标的输入设备。PointerEvent事件和TouchEventAPI对应的触摸事件类似,它继承扩展了TouchEvent,因此拥有TouchEven......
  • 解决antd顶部菜单栏自动收缩成三个点省略号
    问题现象布局示例代码 <Headerstyle={{display:"flex",justifyContent:"space-between",alignItems:"center"}}> <Space> <Imagesrc=""preview={false}/> <Menumode="horizontal"/> &l......
  • 解决Puppeteersharp 被检测到的方法, 顺带学习了js如何实现 模拟点击拖动事件
    varlaunchOptions=newLaunchOptions{Headless=false,DefaultViewport=null,IgnoreHTTPSErrors=true,ExecutablePath=path+"\\.local-chromium\\chrome-win\\chr......
  • 旋转拖动验证码解决方案
    前因曾几何时,你是否被一个旋转验证码而困扰,没错今日主题——旋转验证码。 之前也是被他伤透了心,研究了好几天的js,想直接通过接口传输直接解决验证码的,然而我失败了,不过这一次,他来了他来了,他带着RotNet走来了。彩虹屁RotNet也是我无意间发现的,没错时隔了好几个月,他自己出现在......
  • react ProTable树默认只展示第一层和第二层
    要在AntDesignPro中的ProTable组件中默认展开第一层和第二层,您可以使用expandable的defaultExpandAllRows选项结合expandedRowKeys来实现。以下是一个示例代码,演示如何在AntDesignPro中的ProTable组件中默认展示第一层和第二层:import{ProTable}from'@an......