当前位置: 首页 > news >正文

Uniapp 中 onShow 与 onLoad 的执行时机解析

Vue 中 onShowonLoad 的执行时机解析

在 Vue.js(标准 Vue)和 Uniapp 框架 中,生命周期钩子的执行机制存在差异,特别是你提到的 onShowonLoad

一、标准 Vue.js(浏览器环境)

1. 生命周期钩子

标准 Vue 没有 onShowonLoad 钩子,与之对应的是:

  • created:实例初始化后
  • mounted:DOM 挂载完成后
  • activated:组件被 keep-alive 缓存并激活时
  • updated:数据更新导致 DOM 重新渲染后
2. 执行顺序
created -> mounted -> updated -> destroyed

二、Uniapp 框架(小程序环境)

1. 特有的生命周期钩子

Uniapp 为小程序环境扩展了原生生命周期钩子:

  • onLoad:页面加载时触发(初次创建)
  • onShow:页面显示时触发(每次显示)
  • onReady:页面初次渲染完成时触发
  • onHide:页面隐藏时触发
  • onUnload:页面卸载时触发
2. 执行顺序
  1. 首次进入页面

    onLoad -> onShow -> onReady
    
  2. 从其他页面返回当前页面

    onShow
    
  3. 页面隐藏(跳转到其他页面)

    onHide
    
  4. 页面卸载(如使用 uni.navigateBack()

    onUnload
    

三、关键区别

钩子标准 Vue.jsUniapp(小程序)
onLoad页面初次加载时触发
onShow页面每次显示时触发
mountedDOM 挂载完成后触发类似 onReady

四、你的问题解答

1. onShow 可能在 onLoad 之后吗?

是的,每次页面加载时onLoad 总是先于 onShow 执行:

export default {onLoad(options) {console.log('页面加载:onLoad'); // 先执行},onShow() {console.log('页面显示:onShow'); // 后执行}
}
2. 常见场景
  • 首次进入页面onLoadonShow
  • 切换 TabBar 页面:只触发 onShow(页面已缓存,不再触发 onLoad
  • 返回上一页:只触发 onShow(页面已缓存)

五、使用建议

1. 数据获取
  • 只需要加载一次的数据:放在 onLoad
  • 每次显示都需要更新的数据:放在 onShow
export default {onLoad() {// 初始化数据(只执行一次)this.fetchInitialData();},onShow() {// 刷新数据(每次页面显示时执行)this.refreshData();}
}
2. 性能优化

避免在 onShow 中执行大量计算或频繁请求数据,可结合 onLoad 和缓存机制:

export default {data() {return {loaded: false,data: null}},onLoad() {if (!this.loaded) {this.fetchData();this.loaded = true;}},onShow() {// 只在需要时刷新if (this.needRefresh) {this.refreshData();}}
}

六、验证方法

在页面中添加日志:

export default {onLoad(options) {console.log('onLoad 执行');},onShow() {console.log('onShow 执行');}
}

观察控制台输出,验证执行顺序:

  1. 首次进入页面:

    onLoad 执行
    onShow 执行
    
  2. 从其他页面返回:

    onShow 执行
    

总结

在 Uniapp 中,onShow 总是在 onLoad 之后执行(首次加载时),但 onShow 会在每次页面显示时触发,而 onLoad 仅在页面初次创建时触发一次。理解这一点对处理页面数据和交互至关重要。

http://www.lryc.cn/news/571945.html

相关文章:

  • 【JAVA】的SPI机制
  • new()和new[]有什么区别?
  • tomcat 配置规范
  • springboot入门之路(一)
  • 【软考高级架构设计师】——2024年下半年软考真题(回忆版)
  • 【JUC】显示锁
  • 循环神经网络(RNN):序列数据处理的强大工具
  • 【面试题001】生产环境中如何排查MySQL CPU占用率高达100%?
  • NAT 与代理服务器 -- NAT,NAPT,正向代理,反向代理
  • 前端面试专栏-主流框架:10. React状态管理方案(Redux、Mobx、Zustand)
  • 【C语言极简自学笔记】重讲运算符
  • LVS+Keepliaved高可用群集
  • 【MySQL数据库 | 第五篇】DDL操作2
  • RabbitMQ概念
  • 深入解析线程池与队列系统设计原理
  • 【网工】华为配置专题进阶篇②
  • Oracle 创建定时任务
  • Web服务器/tmp隔离的安全性与绕过分析
  • VSCode 插件 Remote - SSH:开启高效远程开发之旅
  • SpringBoot电脑商城项目--新增收获地址
  • 系统的性能优化
  • kettle好用吗?相较于国产ETL工具有哪些优劣之处?
  • git的使用——初步认识git和基础操作
  • 【Datawhale组队学习202506】零基础学爬虫 01 初始爬虫
  • Goursat问题解的公式推导
  • TikTok 矩阵如何快速涨粉
  • html中的table标签以及相关标签
  • 微信二次开发,对接智能客服逻辑
  • 百度下拉框出词技术解密:72小时出下拉词软件原理分享
  • 5G光网络新突破:<Light: Science Applications>报道可适应环境扰动的DRC实时校准技术