Skip to content

fix: 修复 Table 使用 treeExpandKeys 时 data 含不可序列化字段导致页面崩溃的问题#2215

Merged
saint3347 merged 2 commits into
masterfrom
fix/table-tree-expand-circular-json
May 20, 2026
Merged

fix: 修复 Table 使用 treeExpandKeys 时 data 含不可序列化字段导致页面崩溃的问题#2215
saint3347 merged 2 commits into
masterfrom
fix/table-tree-expand-circular-json

Conversation

@saint3347

Copy link
Copy Markdown
Contributor

问题描述

Table 组件使用 treeExpandKeys 展开树形行时,若 data 中包含 DOM 节点引用、React Ref 等不可 JSON 序列化的字段,JSON.parse(JSON.stringify(data)) 会因循环引用直接报错导致页面崩溃。

修复方案

新增 safeDeepClone 工具函数替代 JSON.stringify 深拷贝:

  • 使用 WeakMap 追踪已访问对象,避免循环引用导致无限递归
  • 跳过 React 元素($$typeof)和 DOM 节点,保持原引用
  • 仅对纯数组和纯 Object 做递归深拷贝,断开 data 引用
  • 保留原有能力:用户直接修改 data 后 Table 仍能响应式更新

测试

  • Table 组件 114 个测试用例全部通过
  • 新增 test-004-tree-expand-mutate 示例验证 DOM 引用场景

saint3347 added 2 commits May 20, 2026 19:46
- 新增 safeDeepClone 工具函数替代 JSON.parse(JSON.stringify()) 进行深拷贝
- 通过 WeakMap 处理循环引用,跳过 React 元素和 DOM 节点
- 保留断开 data 引用的能力,确保直接修改 data 后 Table 仍能响应式更新
@saint3347
saint3347 force-pushed the fix/table-tree-expand-circular-json branch from 8fde2fc to 13e731a Compare May 20, 2026 11:48
@saint3347
saint3347 merged commit b6612db into master May 20, 2026
1 check passed
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.

1 participant