Skip to content

fix(Table): 修复分组表头边界调整列宽时报错 - #4471

Open
cdevq wants to merge 1 commit into
Tencent:developfrom
cdevq:codex/fix-table-group-header-resize
Open

cdevq wants to merge 1 commit into
Tencent:developfrom
cdevq:codex/fix-table-group-header-resize

Conversation

@cdevq

@cdevq cdevq commented Nov 10, 2026 •

Copy link
Copy Markdown

🤔 这个 PR 的性质是?

  • 日常 bug 修复
  • 测试用例

🔗 相关 Issue

暂无关联 Issue。

在线复现:https://stackblitz.com/edit/o3zjm1kh?file=src%2FApp.tsx(tdesign-react 1.18.4,通用静态数据)。

💡 需求背景和解决方案

Table 开启 resizable 且叶子列右侧紧邻分组表头时,鼠标经过叶子列右边缘再进入分组表头点击,会在 onDragEnd 中抛出读取 undefined.prevSibling 的异常;异常也会阻止拖动监听的清理,导致后续普通点击继续报错。

原因是非叶子表头的 mousemove 分支提前返回但保留了上一列的拖动候选状态,而 mousedown 没有再次确认当前列为叶子列。

本次修复:

  1. 进入非叶子表头时,仅清空拖动候选列和方向,保留 attrs 设置的自定义光标。
  2. mousedown 时确认当前列属于叶子列后才允许启动拖动。
  3. 添加七条回归用例:有 / 无分组表头 mousemove 两条错误启动路径、自定义光标保留,以及右边缘、左边缘、已开始拖动后跨过分组表头、右侧固定列激活时的合法拖动。

没有修改公开 API、样式或列宽计算算法。

验证情况:

  • 修改文件 ESLint、上游 lint:tsc、新增回归用例的独立 TypeScript 静态检查通过。
  • 浏览器源码对照:最新上游仍能复现原异常,补丁后相同操作无异常。
  • 浏览器真实鼠标验证:经过叶子列右边缘后进入分组表头点击、随后空白点击均无异常;正常拖动列宽从约 299px 变为约 336px。
  • 新增 7 条回归用例全部通过;切换为修复前的 hook 后,2 条缺陷用例按预期失败,其余 5 条通过。
  • 整库单元测试:89 个文件通过,1438 条通过、1 条跳过。
  • CSR / SSR 快照测试:1920 条全部通过,没有更新快照。
  • 基础组件库 pnpm build 构建通过。

在线示例已保存为公开项目,并验证可重新打开;点击「一键复现」可看到相同错误。

📝 更新日志

tdesign-react

  • fix(Table): 修复可调整列宽时,在叶子列与分组表头边界操作导致未捕获异常的问题。

@tdesign-react/chat

无。

☑️ 请求合并前的自查清单

  • 文档已补充或无须补充(未调整 API)
  • 代码演示已提供或无须提供(独立通用复现)
  • TypeScript 定义已补充或无须补充(无公开类型变更)
  • Changelog 已提供或无须提供

@cdevq
cdevq marked this pull request as ready for review November 10, 2026 04:16
@tdesign-bot

Copy link
Copy Markdown
Collaborator

TDesign Component Site Preview Open

Component Preview
tdesign-react 完成
@tdesign-react/chat 完成

@pkg-pr-new

pkg-pr-new Bot commented Nov 11, 2026

Copy link
Copy Markdown
  • tdesign-react-demo

    npm i https://pkg.pr.new/tdesign-react@4471
    
    npm i https://pkg.pr.new/@tdesign-react/chat@4471
    

commit: d922b54

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants