uni-app beforeDestroy不执行

uni-app beforeDestroy不执行

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

示例代码:

non-tabBar 页面
beforeDestroy() {
alert(444)
},
在
uni.navigateTo({
url: url
})

时不执行,
但是在
uni.reLaunch({
url: url
})
就会执行

操作步骤:

在
uni.navigateTo({
url: url
})

时不执行,
但是在
uni.reLaunch({
url: url
})
就会执行

预期结果:

执行
alert(444)  

实际结果:

没有效果

bug描述:

beforeDestroy不执行

更多关于uni-app beforeDestroy不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

为什么没人答复你,社区问题/bug处理优先级规则,详情:https://ask.dcloud.net.cn/article/38139

更多关于uni-app beforeDestroy不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


不是bug
uni.navigateTo() //离开的页面只是隐藏而已,并没有销毁。所以不会执行是正常的。
uni.reLaunch() // 是销毁所打开的页面,再打开新的页面。所以会执行

在uni-app中,beforeDestroy生命周期钩子不执行是预期行为,而非bug。

核心原因: uni-app的页面管理机制基于小程序架构,uni.navigateTo跳转时页面会被保留在栈中(页面隐藏但未销毁),因此不会触发beforeDestroy。只有页面真正销毁时才会执行该钩子。

具体分析:

  1. uni.navigateTo:新页面入栈,原页面隐藏(onHide触发),但保留在页面栈中,不会销毁,故beforeDestroy不执行。
  2. uni.reLaunch:关闭所有页面并打开新页面,原页面被销毁,因此会触发beforeDestroy
  3. 类似地,uni.redirectTo关闭当前页面也会触发beforeDestroy

解决方案: 若需要在页面跳转时执行清理逻辑,应使用onHideonUnload生命周期:

  • 使用onHide:页面隐藏时触发(适用于navigateTo跳转)。
  • 使用onUnload:页面卸载时触发(适用于redirectToreLaunch、返回且页面销毁时)。

修改示例:

onHide() {
  // 替代beforeDestroy,在页面隐藏时执行
  console.log('页面隐藏,执行清理逻辑');
}
回到顶部