react antd组件中table实现左右拖拽表头

本文介绍了如何在React应用中安装并使用第三方库`react-resizable`实现表头列的可伸缩性,包括配置、组件实现和回调处理,以及在Table组件中的应用示例。
摘要由CSDN通过智能技术生成
  1. 安装第三方库 
    npm i react-resizable --save
  2. 引入第三方库 
    import { Resizable } from 'react-resizable'
    
    import "react-resizable/css/styles.css"
  3. 配置表头拉伸组件(下面代码放在组件外部,否则每次拖拽无法更新) 
    // 可伸缩表头组件
    const ResizableTitle = ({ onResize, width, ...restProps }) => {
        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} style={{ ...restProps?.style, userSelect: 'none' }} />
            </Resizable>
        );
    };
    
  4.  配置表格列columns(最后一列不要设置宽度,否则会引起异常)
    const columns = [
        {
          title: 'name',
          dataIndex: 'name',
          width : 100,
        },
        {
          title: 'code',
          dataIndex: 'code',
          width : 100,
          defaultSortOrder: 'descend',
          sorter: (a, b) => a.code - b.code,
        },
        {
          title: 'key',
          dataIndex: 'key',
        },
      ];
  5.  重新配置表格列,拉伸的方法
    // 可伸缩表头组件
    const [column, setColumn] = useState(
        columns.map(it => {
          it.ellipsis = {
            showTitle: true
          }
          it.onHeaderCell = col => ({
            width: col.width,
            // !传入newColumn,而不传入column,需要拿到有onHeaderCell的值
            onResize: (e, { size }) => handleResize(col, size),
          })
          return it;
        }
        )
      );
    
  6.  拉伸回调的方法
    // table的th实时宽度拖拽的改变
      const handleResize = (col, size) => {
        setColumn(column.map(item => {
          if (item.dataIndex === col.dataIndex) {
            item.width = size.width;
          }
          return item
        }))
      }
    
  7.  自定义拖拽标志
    .react-resizable-handle {
      	position: absolute;
      	right: -5px;
      	bottom: 0;
      	z-index: 1;
      	width: 10px;
      	height: 100%;
      	cursor: col-resize;
    }
  8.  配置table组件

    <Table 
        columns={column} 
    	components={{
            header: {
                cell: ResizableTitle,
             }
        }} 
        dataSource={data} 
    />

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿CCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值