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'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值