antd的可伸缩列用hooks重构后难用的坑,CSS标准文档流与脱离文档流

本文介绍了在使用React Hooks重构antd可伸缩列时遇到的难点,特别是关于CSS标准文档流与脱离文档流的问题。通过实例展示了如何处理拖拽时的宽度偏移量,以及在拖拽结束后更新列宽的方法。同时,文章还提到了在React应用中实现可伸缩列的组件实现和相关事件处理。
摘要由CSDN通过智能技术生成

import React, { useState } from ‘react’

import { Resizable } from ‘react-resizable’

import classnames from ‘classnames’

const ResizeableTitle = (props) => {

const { onResize, width, …restProps } = props

// 添加偏移量

const [offset, setOffset] = useState(0)

if (!width) {

return <th {…restProps} />

}

return (

<Resizable

// 宽度重新计算结果,表头应当加上偏移量,这样拖拽结束的时候能够计算结果;

// 当然在停止事件再计算应当一样,我没试过(笑)

width={width + offset}

height={0}

handle={

<span

// 有偏移量显示竖线

className={classnames([‘react-resizable-handle’, offset && ‘active’])}

// 拖拽层偏移

style={ { transform: translateX(${offset}px) }}

onClick={(e) => {

// 取消冒泡,不取消貌似容易触发排序事件

e.stopPropagation()

e.preventDefault()

}}

/>

}

// 拖拽事件实时更新

onResize={(e, { size }) => {

// 这里只更新偏移量,数据列表其实并没有伸缩

setOffset(size.width - width)

}}

// 拖拽结束更新

onResizeStop={(…argu) => {

// 拖拽结束以后偏移量归零

setOffset(0)

// 这里是props传进来的事件,在外部是列数据中的onHeaderCell方法提供的事件,请自行研究官方提供的案例

onResize(…argu)

}}

draggableOpts={ { enableUserSelectHack: false }}

)

}

export const tableComponent = {

header: {

cell: ResizeableTitle,

},

}

.react-resizable {

position: relative;

background-c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值