欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Uniapp 中 onShow 与 onLoad 的执行时机解析

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

2025/6/20 8:47:38 来源:https://blog.csdn.net/weixin_43114485/article/details/148743090  浏览:    关键词: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 仅在页面初次创建时触发一次。理解这一点对处理页面数据和交互至关重要。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词