用户3019049
用户3019049
  • 发布:2026-03-30 15:37
  • 更新:2026-03-30 15:45
  • 阅读:38

h5打包部署后,离开页面为啥是onhide?

分类:HBuilder

我记得之前退出页面会执行onlaunch啊??怎么现在是onhide?从tabbar页面跳入普通页面,退出不执行onlaunch

2026-03-30 15:37 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

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

根据知识库中的生命周期文档,您混淆了应用生命周期页面生命周期的触发时机。

onLaunch 是应用级生命周期,不是页面级

onLaunch 只在 uni-app 应用初始化完成时触发一次(全局只触发一次),它定义在 App.vue 中,用于应用启动时的全局初始化。它不会因为您离开某个页面而重复触发。

参考:应用生命周期文档

离开页面触发 onHide 是正确行为

当您从 tabbar 页面跳转到普通页面时,原 tabbar 页面只是被隐藏/遮挡,并没有被销毁,因此会触发 onHide 而不是 onLaunchonUnload

根据页面生命周期文档:

当 a 跳转到 b 页面时,a 会触发 onHide,而 b 会触发 onShow。但当 b 被关闭时,b 会触发 onUnload,此时 a 再次显示出现,会再次触发 onShow。

参考:onShow 和 onHide 文档

页面彻底关闭时触发 onUnload

如果您从普通页面点击返回按钮彻底关闭页面,此时会触发 onUnload。而返回上一页时,上一页会从隐藏状态恢复,触发 onShow

tabbar 页面切换的特殊性

在 tabbar 页面之间互相切换时,规则如下:

  • 原 tabbar 页面触发 onHide
  • 新 tabbar 页面触发 onShow
  • 都不会触发 onLoadonLaunch

参考:Vue3 页面生命周期流程图

如果您需要在页面重新显示时刷新数据

请在页面的 onShow 生命周期中处理数据刷新逻辑,而不是 onLaunch

export default {  
  onShow() {  
    // 每次页面显示时都会触发,适合刷新数据  
    console.log('页面显示');  
  },  
  onHide() {  
    // 页面被隐藏时触发  
    console.log('页面隐藏');  
  },  
  onUnload() {  
    // 页面被彻底关闭时触发  
    console.log('页面卸载');  
  }  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

总结onLaunch 是应用启动时的一次性事件,离开页面触发 onHide 是符合预期的设计。如果您之前观察到了不同的行为,可能是混淆了 onShow(页面显示)或使用了 reLaunch/redirectTo 等会关闭页面的跳转方式。

内容为 AI 生成,仅供参考
用户3019049

用户3019049 (作者)

我说错了,没有执行onUnload而是执行了onhide?我记错咯

爱豆豆

爱豆豆 - 办法总比困难多

tabbar页面进入子页面时 tababr页面并没有隐藏肯定不会触发onUnload 只会触发隐藏事件onhide
只有页面被也卸载才会触发 子页面被关闭时就会触发onUnload

  • 用户3019049 (作者)

    我描述的不太好,重新描述一下,从tabbar进入商品详情页面,离开商品页面时触发的是onhide,不是官方说的onUnload,导致我再次进入详情页面页面不调用接口,因为上面的实例没有被卸载。

    2026-03-30 15:48

  • 用户3019049 (作者)

    找到原因了,我自己截断了,基本功废了,ai用多了

    2026-03-30 15:53

  • 爱豆豆

    回复 用户3019049: 嗯嗯 把文档下载下来 喂给ai 这样就不会出错了

    2026-03-30 16:01

  • 用户3019049 (作者)

    回复 爱豆豆: 好的,谢谢爱老师的解答。

    2026-03-30 16:06

要回复问题请先登录注册