当前位置: 首页 > 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 仅在页面初次创建时触发一次。理解这一点对处理页面数据和交互至关重要。

相关文章:

  • MacOS X 命令行永久设置网卡IP、MASK、GW、DNS
  • uni-app总结3-项目新建运行调试
  • easyexcel基于模板生成报表
  • kafka消费的模式及消息积压处理方案
  • 【系统分析师】2015年真题:案例分析-答案及详解
  • 【隐马尔可夫模型】隐马尔可夫模型的观测序列概率计算算法及例题详解
  • 【一天一个知识点】RAG系统构建第二步:构建检索器模块(Retriever)
  • 电路笔记(信号):一阶低通RC滤波器 一阶线性微分方程推导 拉普拉斯域表达(传递函数、频率响应)分析
  • 京东三年一革新:宣布进军酒旅行业,携程回应海外市场巨大
  • Seo工具使用与流量数据观察实践(上)
  • Java并发编程实战 Day 28:虚拟线程与Project Loom
  • 【Ambari3.0.0 部署】Step1—基础环境准备-适用于el8
  • YOLO v5详解(文字版)
  • 解决Matplotlib三维图无法旋转的问题
  • 全排列问题一文详解
  • 几种大功率远距传输WiFI解决方案
  • 1、使用STM32CubeMX在项目中添加FreeRTOS源码
  • 9. TypeScript 泛型
  • 【CiteSpace】引文可视化分析软件CiteSpace下载与安装
  • FPGA基础 -- Verilog 锁存器简介
  • 网站建设算什么专业/百度电脑版官方下载
  • 东莞电商网页设计/qq群排名优化软件购买
  • 上海网站设计团队/产品推广软文200字
  • 深圳企业网站开发/高端营销型网站
  • 网站建设方案确认表/软件开发培训机构
  • 杨中市网站建设/免费推广论坛