Skip to content

fix(TreeSelect): sync external values in uniapp - #4671

Closed
dvd233 wants to merge 1 commit into
Tencent:developfrom
dvd233:codex/fix-uniapp-tree-select-external-values
Closed

dvd233 wants to merge 1 commit into
Tencent:developfrom
dvd233:codex/fix-uniapp-tree-select-external-values

Conversation

@dvd233

@dvd233 dvd233 commented Oct 9, 2026

Copy link
Copy Markdown

🤔 这个 PR 的性质是?

  • 日常 bug 修复
  • 测试用例

🔗 相关 Issue

源码排查发现的问题,无关联 Issue。

💡 需求背景和解决方案

父组件将 value 从 [1, 11] 更新为 [2, 22] 后,TreeSelect 收到了新 prop,但仍使用旧 innerValue 构建选项,显示第一组子节点。动态修改 customValue 也不会重新构建选项。

监听两种外部值的替换和深层变化,先同步当前值,再重建选项。保留 customValue 的优先级、value=[] 默认选中首项与 customValue=[] 无选中的区别;使用已有 dataValue 保留非受控交互状态,使移除临时 customValue 后能够恢复用户选择。外部同步不额外触发 change 或 update:value。

验证:

  • 现有 Jest 配置:2 suites、17 tests 通过。新增的 15 项回归在原始源码上为 12 失败、3 对照通过。测试执行当前 SFC 脚本与真实 Vue watcher,仅 stub 子组件展示部分。
  • TreeSelect 与 9 个真实子 SFC 的浏览器 fixture:修复前 12 失败、7 对照通过,修复后 19/19 通过,包含真实点击、外部数组 [] 重置、多选及非受控选择恢复;无页面异常或 Vue warning。使用官方 H5/Vue3 条件预处理,适配设备元信息、浏览器基础标签和 rpx 单位,不代表完整 uni-app 发布页或微信真机验证。
  • 修改文件 ESLint 0 errors(3 条原有 _trigger warning)、Prettier 通过;原生 release:prepare 完成,覆盖 uniapp 与 uniapp-chat 的分发准备和 LESS 编译。未运行完整 H5/微信应用构建或整仓全部组件测试。

Browser component fixture (synthetic data):

Before After
Before external value synchronization After external value synchronization

📝 更新日志

@tdesign/uniapp

  • fix(TreeSelect): 修复外部 value、customValue 更新或使用空数组重置后选中状态和选项列未同步的问题。

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

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • Changelog 已提供或无须提供

@dvd233

dvd233 commented Oct 15, 2026

Copy link
Copy Markdown
Author

按维护者在 #4672 的建议,本项修复已作为独立提交 3479dc6 整合到 #4670。三个修复在同一源码上联合验证:41 项单测、3 个快照和 41 个浏览器组件场景通过;具体环境与限制已写入 #4670 正文。关闭本 PR 以集中评审,原分支与验证证据保留。

@dvd233 dvd233 closed this Oct 15, 2026
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