Skip to content

[sync] feat(x): support destroyOnHidden on Think and ThoughtChain (#1985) - #166

Merged
cc-hearts merged 2 commits into
mainfrom
sync/ant-design-x-1985
Aug 4, 2026
Merged

[sync] feat(x): support destroyOnHidden on Think and ThoughtChain (#1985)#166
cc-hearts merged 2 commits into
mainfrom
sync/ant-design-x-1985

Conversation

@cc-hearts

Copy link
Copy Markdown
Member

背景

同步上游 ant-design/x#1985(merge commit 818b6e05999886ce11b9b79ebf111a38aca09d95)。

为 Think 与 ThoughtChain 暴露 destroyOnHidden,让使用方决定折叠时内容是被销毁还是保留在 DOM 中。

与上游实现的差异(重点)

上游 React 侧是把标志透传给 rc-motion 的 removeOnLeave。Vue 侧没有对应能力,因此改为:

  • destroyOnHidden: true(默认)— 保持原有 Transition + 条件渲染,折叠后节点被销毁
  • destroyOnHidden: false — 用 withDirectives(node, [[vShow, expanded]]) 让节点常驻、仅 display: none

Transitionv-show 组合是 Vue 官方支持的用法,vShow 指令会复用 vnode 上的 transition 钩子,因此原有的 height/opacity 折叠动画不受影响,onAfterLeave 仍会清空 height/opacity。

另外,默认路径下不会构造内容 vnode(slots.default 不被调用),与改动前行为完全一致,避免折叠状态下的无谓渲染。

实现范围

  • Think.tsx:新增 destroyOnHidden prop,默认 true
  • thought-chain/Node.tsx:读取 item.destroyOnHidden ?? true
  • 两处 interface.ts 补类型与 @default true
  • 中英文档 API 表格各补一行(表格因新增列宽做了重新对齐)
  • 新增 demo/destroy-on-hidden.vue 各一个
  • 单测 7 个

验收标准

  • 默认行为下折叠后内容 DOM 仍被销毁,向后兼容
  • destroyOnHidden=false 时 DOM 与内部状态跨折叠保留
  • Think 与 ThoughtChain 均覆盖受控 / 非受控展开场景
  • 动画结束后不残留 height/opacity(沿用原 onAfterLeave
  • vp check / vp test本地环境无 Node 运行时,未执行,需在 CI 或有 Node 的环境确认

关于测试

单测刻意避开了 transition 时序(jsdom 下 leave 依赖 rAF/transitionend),改为断言「折叠后仍是同一个 DOM 节点、且折叠前写入 input 的值仍在」,这正是 destroyOnHidden=false 要保证的语义,且不受动画完成时机影响。

Ref #149
close #145

Expose destroyOnHidden on Think and on ThoughtChain items, defaulting to
true so collapsed content keeps being destroyed. Setting it to false
keeps the content node mounted and only hides it, preserving streaming
output and inner component state across a collapse.

Sync ant-design/x#1985.

close #145
@cc-hearts
cc-hearts merged commit 1e18ffe into main Aug 4, 2026
1 check passed
@cc-hearts
cc-hearts deleted the sync/ant-design-x-1985 branch August 4, 2026 16:48
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.

[sync][P2] Think/ThoughtChain: 支持 destroyOnHidden (#1985)

1 participant