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。只有页面真正销毁时才会执行该钩子。
具体分析:
uni.navigateTo:新页面入栈,原页面隐藏(onHide触发),但保留在页面栈中,不会销毁,故beforeDestroy不执行。uni.reLaunch:关闭所有页面并打开新页面,原页面被销毁,因此会触发beforeDestroy。- 类似地,
uni.redirectTo关闭当前页面也会触发beforeDestroy。
解决方案:
若需要在页面跳转时执行清理逻辑,应使用onHide或onUnload生命周期:
- 使用
onHide:页面隐藏时触发(适用于navigateTo跳转)。 - 使用
onUnload:页面卸载时触发(适用于redirectTo、reLaunch、返回且页面销毁时)。
修改示例:
onHide() {
// 替代beforeDestroy,在页面隐藏时执行
console.log('页面隐藏,执行清理逻辑');
}

