1***@qq.com
1***@qq.com
  • 发布:2026-03-08 12:11
  • 更新:2026-03-08 12:11
  • 阅读:8

【报Bug】使用v-for渲染embed组件,销毁时,触发原生组件的aboutToDisappear异常

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: Alpha

HBuilderX版本号: 5.02

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 6.0.0

手机厂商: 华为

手机机型: HUAWEI Mate60Pro

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:
  1. 下载附件demo,点击 设置ID 创建几个embed组件
  2. 从第一个开始删除

预期结果:

每个embed组件都会触发aboutToDisappear回调

实际结果:

前几个不会触发aboutToDisappear,后几个会触发aboutToDisappear

bug描述:

使用v-for渲染embed组件时,当删除掉某个渲染出来的embed组件时,原生组件的aboutToDisappear触发异常,比如for循环创建了六个embed,删除前三个完全不会触发aboutToDisappear,但是删除后三个就会触发自己的aboutToDisappear以及前面异常没触发的aboutToDisappear。

2026-03-08 12:11 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

作为 DCloud 官方人员,我对这条 bug 反馈进行如下评审:


一、反馈完整性评估

检查项 状态 说明
BUG 标题 简洁明了,指出“v-for + embed + aboutToDisappear 异常”
BUG 描述 描述清楚,指出“删除前三个不触发,后三个触发并补触发前面的”
代码示例 未提供可直接运行的最小复现 demo,仅提示“下载附件 demo”,但附件未上传
复现步骤 ⚠️ 步骤简单,但依赖附件 demo,未提供最小可运行代码片段
预期结果 合理:每个 embed 都应触发 aboutToDisappear
实际结果 明确:前几个不触发,后几个触发并补触发
分类信息 提供了完整的环境信息(平台、系统、HX 版本、Vue 版本等)

⚠️ 建议用户补充:请上传最小可运行 demo 或贴出关键代码(如 <embed> 使用方式、v-for 绑定逻辑、删除逻辑等),否则我们无法精确定位问题。


二、是否为已知问题或平台限制

根据知识库内容:

  • embed 组件在鸿蒙平台使用原生组件渲染,其生命周期由原生层控制,确实存在生命周期触发时序不一致的风险。
  • 鸿蒙平台原生组件生命周期触发机制与 Web 端不同,可能存在延迟或合并触发的行为。
  • ⚠️ 知识库中未明确说明 aboutToDisappear 在 v-for 删除时一定触发,因此不能排除是平台行为或 bug。

? 结论:该问题可能为 bug,但需要进一步确认是否为平台行为或生命周期机制差异。


三、是否为基础概念误用

  • 不是基础概念误用:用户正确使用 v-for 渲染 embed,并通过删除操作触发组件卸载。
  • 不是平台不支持:鸿蒙平台明确支持 embed 渲染原生组件,见 调用鸿蒙原生组件

四、官方建议的下一步操作

  1. 请用户补充最小复现 demo(zip 或 GitHub 链接),包含:

    • v-for 渲染 <embed> 的代码
    • 删除逻辑(如点击按钮删除某一项)
    • 原生组件的 aboutToDisappear 实现(如 ArkTS 侧代码)
  2. 建议用户尝试以下方式验证是否为平台行为

    • 使用 onBeforeUnmount / onUnmounted 替代 aboutToDisappear,看是否触发
    • 使用 key 绑定唯一值,避免 Vue 复用节点
    • 使用 v-if 替代 v-for 删除,看是否触发
  3. 如确认为 bug,将提交至 HarmonyOS 适配团队处理,并建议用户临时使用 v-if 控制组件卸载作为规避方案。


✅ 总结

项目 结论
是否为有效 bug ✅ 是,需进一步确认
是否需补充信息 ✅ 需补充 demo 和原生组件代码
是否可复现 ⚠️ 无法确认,需用户补充
是否可临时规避 ✅ 可尝试 v-if 替代 v-for 删除

如需继续跟进,请上传 demo 或贴出关键代码,我们将优先处理。

内容为 AI 生成,仅供参考

要回复问题请先登录注册