微信小程序的生命周期是开发中最核心的概念之一,它决定了你的代码在什么时候执行。
简单来说,微信小程序的生命周期分为三层:应用级别 (App)、页面级别 (Page) 和 组件级别 (Component)。
以下是详细的层级讲解与最佳实践:
1. 应用生命周期 (App Lifecycle)
这属于全局层级,定义在 app.js 中。它主要控制小程序整体的启动、切前台和切后台。
关键概念:冷启动 vs 热启动
冷启动 (
onLaunch):用户首次打开,或小程序被微信销毁后再次打开。热启动 (
onShow):用户只是把小程序切到了后台(如回微信聊天),短时间内再次打开。此时不会触发onLaunch。
2. 页面生命周期 (Page Lifecycle)
这是最常用的层级,定义在每个页面的 .js 文件中。它管理当前页面的加载、显示和销毁。
⚠️ 常见误区:onLoad vs onShow
如果你希望数据只在第一次进页面时加载,放在
onLoad。如果你希望每次返回这个页面(例如从详情页返回列表页)都刷新数据,放在
onShow。
3. 组件生命周期 (Component Lifecycle)
自定义组件的生命周期,官方推荐写在 lifetimes 字段中(优先级最高)。
4. 整体执行顺序 (宏观视角)
当你打开一个小程序的首页时,执行顺序如下:
App: onLaunch(应用启动)App: onShow(应用显示)Page: onLoad(首页加载)Page: onShow(首页显示)Page: onReady(首页渲染完成)
当你从页面 A 跳转到 页面 B (wx.navigateTo):
Page A: onHidePage B: onLoadPage B: onShowPage B: onReady
当你从页面 B 返回 页面 A (wx.navigateBack):
Page B: onUnload(B 被销毁)Page A: onShow(A 重新显示,注意不会触发 onLoad)
总结与建议
数据初始化:尽量放在
onLoad,减少不必要的请求。UI 操作:必须放在
onReady之后,否则获取不到节点信息。资源释放:务必在
onUnload(页面) 或detached(组件) 中清除setInterval,否则会导致内存泄漏。Vue 开发者注意:小程序的
onLoad类似于 Vue 的created,onReady类似于 Vue 的mounted,但onShow在 Vue 中没有直接对应的(除非用keep-alive的activated)。