Uniapp 生命周期钩子destroyed 详解
创作时间:
作者:
@小白创作中心
Uniapp 生命周期钩子destroyed 详解
引用
1
来源
1.
https://www.pweb123.com/frame/uniapp/1095.html
在Uniapp开发中,合理管理组件生命周期对于防止内存泄漏、事件堆积和资源未释放等问题至关重要。本文将详细介绍Uniapp中的destroyed生命周期钩子,包括其执行时机、基本用法、实际应用场景以及注意事项与最佳实践。
什么是 destroyed 钩子
destroyed
是 Vue.js(以及基于 Vue 的 Uniapp)组件生命周期中的一个重要钩子函数,它会在 Vue/Uniapp 实例被销毁后调用。在 Uniapp 中,这个生命周期函数同样适用,当页面或组件被卸载时触发。
destroyed 的执行时机
destroyed
钩子在以下情况下会被调用:
- 页面导航离开时:当用户从当前页面跳转到其他页面(非 tabbar 页面)
- 组件被移除时:当父组件动态移除了某个子组件
- 手动销毁实例时:通过调用
this.$destroy()
需要注意的是:
- tabbar切换不会触发页面的
destroyed
navigateBack
返回时会触发前一个页面的created
,但不会立即销毁当前页
基本用法示例
export default {
data() {
return {
timer: null
}
},
created() {
//创建一个定时器
this.timer = setInterval(() => {
console.log('定时器运行中...')
},1000)
},
destroyed() {
//清除定时器避免内存泄漏
if(this.timer) {
clearInterval(this.timer)
this.timer = null;
console.log('定时器已清除')
}
console.log('组件/页面已被销毁')
}
}
实际应用场景
- 清理工作
destroyed() {
//取消事件监听
uni.$off('someEvent', this.handleEvent);
//清除地图实例
if(this.map) {
this.map.destroy();
this.map = null;
}
}
- 数据保存到全局或缓存
destoryed() {
//将表单数据保存到全局store或缓存
if(this.formData) {
uni.setStorageSync('draftForm',this.formData);
}
//或者使用vuex
this.$store.commit('saveTempData',this.tempData);
}
- WebSocket连接关闭
destoryed(){
if(this.socket && this.socket.readyState === WebSocket.OPEN){
this.socket.close();
console.log("WebSocket连接已关闭");
}
}
注意事项与最佳实践
- 与 beforeDestroy的区别
beforeDestroy
:实例销毁之前调用,此时实例仍然完全可用(适合做清理前的准备工作)destoryed
:实例销毁后调用,所有绑定和监听都会被移除,子实例也都被销毁
- 移动端特殊考虑
在Uniapp的移动端环境中:
- Android物理返回键会触发destoryed而iOS滑动返回默认不会(可通过配置改变)
- APP进入后台不会触发,destory只在实际卸载时发生
- 性能优化建议
对于可能频繁创建销毁的组件:
- destory时要彻底释放大对象引用(null赋值)
- WebGL/Canvas等资源要手动释放
- 常见错误处理
destoryd(){
try{
this.clearAllIntervals();
}catch(e){
console.error("清理失败:",e);
}
},
methods:{
clearAllIntervals(){
let lastId = setInterval(()=>{},9999);
for(let i=lastId;i>=0;i--){
clearInterval(i);
}
}
}
- 调试技巧
可以在控制台输出查看是否发生内存泄漏:
//在入口文件添加
Vue.config.devtools=true;
Vue.config.debug=true;
Vue.config.productionTip=false;
总结
合理使用 destoryd生命周期能有效防止:
✓内存泄漏 ✓事件堆积 ✓资源未释放等问题。在Uniapp开发中,特别是需要管理原生资源的场景(如地图、音视频),做好销毁处理尤为重要。
热门推荐
走出补觉误区
扣完五险一金后,每月到手工资是1万元,是什么水平?
什么叫理财通及其在投资市场中的作用?这种理财产品有哪些特点和风险?
当持仓涨多了,怎么进行再平衡
上班族喝咖啡,几点喝提神又健康?劲松中西医科普
U盘传输慢怎么办?五个提升速度的技巧是什么?
如何选择合适的护发产品
全面掌握!梨状肌综合征的解剖、变异、检查、诊断及治疗、拉伸和争议
孩子不叫人,不一定代表他们不懂礼貌
数字排毒与身心健康:在信息爆炸的时代保持心理健康
自动化测试中如何应对接口变更
真正修行的人,每天脑子里都在想什么呢?
坐骨神经痛一招自愈
人所有痛苦和烦恼的根源往往在于内心的执念与不满足
美国公司盖章和签名:常见问题解答及注意事项
肚子上的妊娠纹痒用什么药止痒
经常睡眠不好的人,睡前坚持3个习惯,或能帮你睡个好觉
睡觉前尽量不要喝水,有什么作用?医生:经常失眠或与肾有关
笔记本散热器是智商税吗?原来散热架也分这么多种
尿液五种异味要谨慎,可能痛风前兆!
案例分析:提被迫解除,忽视这个程序,经济补偿不支持!
去医院掏耳朵应该挂什么科
东风在诗词中有什么寓意?有哪些诗词与东风相关?
ETC还需要充电吗
活塞连杆组的组成及结构与作用(图解)
何塞·安东尼奥·陈简介
如何科学食用南瓜界的“糖炒栗子”?
税务纠纷:个人代开劳务费如何征收个税?
劳务合同个人所得税规划方案
磁悬浮轴承风扇:高效安静的未来之风