Skip to content

Conversation

baozjj
Copy link
Contributor

@baozjj baozjj commented Sep 2, 2025

🤔 这个 PR 的性质是?

  • 日常 bug 修复

🔗 相关 Issue

修复了 NotifyPlugin.close() 会错误触发 onCloseBtnClick 事件的问题。

💡 需求背景和解决方案

问题背景:
onCloseBtnClick 事件本应仅在用户手动点击关闭按钮时触发。但在之前的实现中,通过代码调用 NotifyPlugin.close() 方法同样会错误地触发该事件。这会导致开发者在 onCloseBtnClick 回调中编写的、仅针对用户行为的逻辑被意外执行,从而引发潜在的 Bug。

解决方案:
新增 onClose 事件,将程序化关闭和用户手动关闭的逻辑进行解耦。
Notification: 新增 onClose prop,并重构内部关闭逻辑,区分了用户点击 (handleCloseBtnClick) 和程序化调用 (close),确保只有前者触发 onCloseBtnClick 事件。

备注:
‘packages/components/notification/_example/plugin.vue’是为了演示这个场景,后续需要删除

📝 更新日志

  • 本条 PR 不需要纳入 Changelog

tdesign-vue-next

  • fix(Notification): 调用 NotifyPlugin.close() 将不再触发 onCloseBtnClick 事件

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

⚠️ 请自检并全部勾选全部选项⚠️

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

onCloseBtnClick 事件本应仅在用户手动点击关闭按钮时触发。但在之前的实现中,通过代码调用 NotifyPlugin.close() 方法同样会错误地触发该事件。
这会导致开发者在 onCloseBtnClick 回调中编写的、仅针对用户行为的逻辑被意外执行,从而引发潜在的 Bug。
新增一个 onClose 事件,将程序化关闭和用户手动关闭的逻辑进行解耦。

现在,NotifyPlugin.close() 只会触发内部的 onClose 来销毁组件,确保了 onCloseBtnClick 行为的正确性。

BREAKING CHANGE: 调用 NotifyPlugin.close() 将不再触发 onCloseBtnClick 事件。
@tdesign-bot
Copy link
Collaborator

tdesign-bot commented Sep 2, 2025

TDesign Component Site Preview Open

Component Preview
tdesign-vue-next 完成
@tdesign-vue-next/chat 完成

Copy link

pkg-pr-new bot commented Sep 2, 2025

tdesign-vue-next-demo

npm i https://pkg.pr.new/Tencent/tdesign-vue-next/@tdesign-vue-next/auto-import-resolver@5958
npm i https://pkg.pr.new/Tencent/tdesign-vue-next@5958
npm i https://pkg.pr.new/Tencent/tdesign-vue-next/@tdesign-vue-next/chat@5958

commit: efa110c

@uyarn
Copy link
Collaborator

uyarn commented Sep 2, 2025

备注: ‘packages/components/notification/_example/plugin.vue’是为了演示这个场景,后续需要删除

@baozjj 👍 不过可以移除然后用 #5958 (comment) 来添加这个plugin.vue演示效果即可,这个stackblitz 打开后里面的 pkg 是以你的这个PR构建的产物

@baozjj
Copy link
Contributor Author

baozjj commented Sep 3, 2025

备注: ‘packages/components/notification/_example/plugin.vue’是为了演示这个场景,后续需要删除

@baozjj 👍 不过可以移除然后用 #5958 (comment) 来添加这个plugin.vue演示效果即可,这个stackblitz 打开后里面的 pkg 是以你的这个PR构建的产物

感谢您的指导,我已移除 plugin.vue 的演示代码,并在 StackBlitz 中创建了相关的演示,用于验证本次修复的效果:
https://stackblitz.com/edit/kkkjiajv?file=src%2FDemo.vue

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.

3 participants