1***@qq.com
1***@qq.com
  • 发布:2026-08-10 18:39
  • 更新:2026-08-10 18:40
  • 阅读:66

【报Bug】微信小程序,vue3,使用uni-popup时,遇到了点击不弹窗的问题

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 企业版 25H2

HBuilderX类型: 正式

HBuilderX版本号: 5.23

第三方开发者工具版本号: 2.02.260721 win32-x64

基础库版本号: 3.16.2

项目创建方式: HBuilderX

操作步骤:

运行附件代码到微信小程序开发工具。点击示例中的弹窗,点击弹出窗口的遮罩层关闭弹窗,再次点击弹窗按钮,一直循环操作。

预期结果:

每次点击按钮都能弹出弹窗。

实际结果:

红色按钮点击第一次出弹窗,第二次不出弹窗,一直轮替。

bug描述:

微信小程序,vue3,使用uni-popup组件,多做了一层封装,使用v-if控制组件是否加载。
使用vue2的格式编写,弹窗正常弹出;使用vue3 setup格式编写,多次调用弹窗打开方法,一次正常弹出,一次不弹出,一直交替

2026-08-10 18:39 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-ui官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug 报告,我作为 DCloud 官方人员对该反馈的质量与内容进行了评审,具体分析如下:

1. Bug 反馈内容完整性分析

  • BUG 描述:描述非常清晰。您明确指出了项目环境(微信小程序、Vue3)、所做的特殊封装(多做了一层封装并使用 v-if 控制加载)、以及对比现象(Vue2 格式正常,Vue3 setup 格式出现交替弹窗失效)。这有助于官方人员快速定位问题方向。
  • 代码示例存在不足。您在复现步骤中提到了“运行附件代码”,但当前反馈系统中并未包含可见的代码或附件内容。由于该问题涉及组件封装和 v-if 控制的具体写法,缺少可直接运行的完整示例代码会导致官方人员无法直接验证,需要自行猜测和构建环境。建议您补充完整的可复现工程代码。
  • 复现步骤:描述清晰。结合您的描述,官方人员可以明确知道需要通过点击按钮弹出、点击遮罩关闭、再次点击来循环验证交替失效的现象。但前提是需要结合上述缺失的代码示例才能顺利复现。
  • 预期结果与实际结果:描述合理且明确。预期“每次点击都能弹出”是组件的基本正常逻辑,实际结果中描述的“一次正常弹出,一次不弹出,一直交替”也是非常典型的状态同步或渲染时序问题,不属于误报。
  • 分类信息存在缺失。您提供了 PC 开发环境、HBuilderX 版本号(5.23)以及平台分类(微信),但缺少了微信开发者工具版本号、微信基础库版本号以及 Vue 版本(虽然描述中提到了 Vue3,但分类字段缺失)。这些信息在排查微信小程序组件渲染问题时十分关键。

2. Bug 是否成立及依据分析

根据官方文档与知识库信息,该 Bug 现象是有明确依据的,大概率成立,主要与 uni-popup 组件的机制及 Vue3 在小程序中的响应式时序有关:

  • 组件防抖机制:根据 uni-popup 官方文档 说明,uni-popup 为了防止快速打开关闭的情况,组件默认设置了 300毫秒延迟显示。如果您在封装层使用 v-if 频繁销毁和重建组件,并在关闭弹窗后立即尝试重新创建并调用打开方法,极易与该 300ms 的内部防抖机制产生状态冲突。
  • Vue3 小程序数据绑定与渲染时序:在 Vue3 的微信小程序环境中,组件的生命周期与数据同步时序与 Vue2 存在差异。参考社区历史反馈 uni-popup-dialog 组件在微信小程序 Vue3 中的异常问题 以及 Vue3 微信小程序端数据双向绑定问题,Vue3 在小程序端处理 v-if 控制的组件挂载、ref 获取以及内部状态同步时,容易出现状态未及时更新或获取实例异常的情况。您的“交替失效”现象正是典型的内部状态(如 isShow 或防抖锁)与外部 v-if 状态不同步导致的表现。

建议与替代方案
在补充代码示例等待官方排查的同时,建议您尝试调整封装层的调用方式以规避该问题:

  1. 尽量避免对 uni-popup 使用 v-if 进行频繁的销毁重建,推荐使用 v-show 或直接保持组件挂载,通过调用组件内部的 open()close() 方法来控制显隐。
  2. 如果必须使用 v-if,请确保在组件完全挂载完毕(例如在 nextTickonMounted 之后)再调用 open() 方法,并注意避免在 300ms 内频繁触发。

建议您补充缺失的代码示例与完整的版本信息,以便我们进一步确认并跟进该问题。

内容为 AI 生成,仅供参考

要回复问题请先登录注册