在使用 uniapp 开发跨平台应用时,生命周期函数(Lifecycle Hooks)是页面与组件运行过程中的重要节点。掌握这些钩子函数的执行时机和作用,有助于我们在合适的时间执行数据加载、事件绑定、资源释放等逻辑,从而提升应用性能与用户体验。

本文将结合 onLoad / onShow / onHide / onUnload / onReady 等常用生命周期函数,详细介绍它们的执行时机、适用场景和注意事项。


一、页面生命周期函数概览

在 uniapp 的页面(.vue 文件)中,主要有以下生命周期:

  1. onLoad(options)
  • 页面加载时触发,只会在页面初次进入时调用一次。
  • 可用于接收页面跳转时的参数 options
  • 一般适合进行初始化数据的加载。
  1. onShow()
  • 页面每次显示时触发(包括首次进入和从后台返回前台)。
  • 常用于刷新页面数据。
  1. onReady()
  • 页面初次渲染完成时触发。
  • 只会执行一次,一般用于获取 DOM 节点信息、初始化第三方插件等。
  1. onHide()
  • 页面隐藏时触发(如 navigateTo 跳转到其他页面,或 app 切到后台)。
  • 常用于暂停定时器、停止播放音乐等。
  1. onUnload()
  • 页面卸载时触发(如 navigateBack 返回上一个页面)。
  • 适合进行清理工作,比如销毁定时器、解绑监听器等。

二、执行顺序示例

以下是从进入页面到退出页面的执行顺序:

进入页面:onLoad -> onShow -> onReady
切换到其他页面:onHide
从其他页面返回:onShow
关闭页面:onUnload

三、代码示例

下面是一个简单的示例,演示生命周期函数的使用。

export default {data() {return {title: '生命周期示例',counter: 0,timer: null}},onLoad(options) {console.log('页面加载,参数:', options);this.counter = 0;},onShow() {console.log('页面显示');// 启动定时器this.timer = setInterval(() => {this.counter++;console.log('计数器:', this.counter);}, 1000);},onReady() {console.log('页面渲染完成');},onHide() {console.log('页面隐藏');// 暂停定时器clearInterval(this.timer);},onUnload() {console.log('页面卸载');// 清理资源clearInterval(this.timer);}
}

四、使用场景总结

  1. onLoad
  • 初始化数据
  • 接收页面参数
  • 发起首次网络请求
  1. onShow
  • 每次页面可见时刷新数据
  • 检查用户状态(登录、授权等)
  • 恢复被暂停的任务
  1. onHide
  • 暂停任务(定时器、视频播放等)
  • 保存临时数据
  1. onUnload
  • 销毁定时器、解绑监听
  • 释放内存资源

五、注意事项

  • onLoad 只执行一次:即使多次进入同一页面实例,只有在页面首次创建时才会调用。
  • onShow 会多次执行:每次页面切换回来都会执行,非常适合做数据刷新。
  • onHide 不等于关闭页面:只是页面被切走,可能还会回来。
  • 在小程序平台与 App 平台,这些生命周期的执行时机基本一致,但在 H5 端的表现可能略有不同,需要适配。

六、结语

掌握 uniapp 的生命周期函数,可以帮助开发者在合适的时机执行逻辑,从而避免性能浪费与逻辑混乱。在实际开发中,建议根据页面需求合理分配逻辑位置,比如数据初始化放在 onLoad,数据刷新放在 onShow,资源清理放在 onUnloadonHide 中。

这样不仅能让代码结构更加清晰,也能让应用运行更流畅。