个人学习记录笔记,如有错误感谢指出
微信小程序生命周期
微信小程序的生命周期分为三个层级:应用生命周期、页面生命周期和组件生命周期。
1. 应用生命周期 (App)
应用生命周期在 app.js 中定义,控制整个小程序的生命周期。
App({
// 小程序初始化完成时触发,全局只触发一次
onLaunch(options) {
// options 包含场景值、启动参数等
},
// 小程序启动或从后台进入前台显示时触发
onShow(options) {
// 可在此处获取场景值,判断小程序进入场景
},
// 小程序从前台进入后台时触发
onHide() {
// 可做一些数据保存、清理工作
},
// 小程序发生脚本错误或 API 调用报错时触发
onError(error) {
// 可在此处统一处理错误
},
// 小程序要打开的页面不存在时触发
onPageNotFound(res) {
// 可在此处做统一的页面不存在处理
},
// 小程序运行脚本出现未处理的 Promise 拒绝时触发
onUnhandledRejection(res) {
// 处理未捕获的 Promise 异常
},
// 系统主题变化时触发
onThemeChange(res) {
// 响应系统主题变化
}
})
2. 页面生命周期 (Page)
页面生命周期在每个页面的 JS 文件中定义,控制单个页面的生命周期。
Page({
// 页面加载时触发,一个页面只会调用一次
onLoad(options) {
// options 为页面跳转所带来的参数
},
// 页面显示/切入前台时触发
onShow() {
// 页面显示时可执行的操作
},
// 页面初次渲染完成时触发,一个页面只会调用一次
onReady() {
// 可在此处获取并设置页面元素
},
// 页面隐藏/切入后台时触发
onHide() {
// 页面隐藏时可执行的操作
},
// 页面卸载时触发
onUnload() {
// 页面销毁时执行的清理操作
},
// 下拉刷新时触发
onPullDownRefresh() {
// 需要在页面配置中开启 enablePullDownRefresh
},
// 上拉触底时触发
onReachBottom() {
// 可用于加载更多数据
},
// 用户点击右上角分享时触发
onShareAppMessage(res) {
// 定义分享内容
return {
title: '分享标题',
path: '/pages/index/index'
}
},
// 页面滚动时触发
onPageScroll(res) {
// res.scrollTop 为页面在垂直方向已滚动的距离
},
// 页面尺寸变化时触发
onResize(res) {
// 响应页面尺寸变化
},
// 当前是 tab 页时,点击 tab 时触发
onTabItemTap(item) {
// item 包含 index、pagePath、text 属性
}
})
3. 组件生命周期 (Component)
组件生命周期在自定义组件的 JS 文件中通过 lifetimes 定义。
Component({
lifetimes: {
// 组件实例刚创建时触发
created() {
// 此时不能调用 setData
},
// 组件实例进入页面节点树时触发
attached() {
// 此时可以调用 setData
},
// 组件在视图层布局完成后触发
ready() {
// 可获取组件尺寸等信息
},
// 组件实例被移动到节点树另一个位置时触发
moved() {
// 组件位置变化
},
// 组件实例被从页面节点树移除时触发
detached() {
// 组件销毁时的清理工作
},
// 组件实例销毁前触发
error(error) {
// 组件错误处理
}
},
// 组件所在页面的生命周期函数
pageLifetimes: {
// 组件所在页面显示时触发
show() {
// 页面显示时组件可执行的操作
},
// 组件所在页面隐藏时触发
hide() {
// 页面隐藏时组件可执行的操作
},
// 组件所在页面尺寸变化时触发
resize(size) {
// 响应页面尺寸变化
}
}
})
4. 生命周期执行顺序
小程序启动流程
- App.onLaunch
- App.onShow
- 页面 Page.onLoad
- 页面 Page.onShow
- 页面 Page.onReady
小程序切后台流程
- 页面 Page.onHide
- App.onHide
小程序切前台流程
- App.onShow
- 页面 Page.onShow
页面跳转流程
- 当前页面 Page.onHide
- 新页面 Page.onLoad
- 新页面 Page.onShow
- 新页面 Page.onReady
页面返回流程
- 当前页面 Page.onUnload
- 返回页面 Page.onShow
组件创建流程
- Component.created
- Component.attached
- Component.ready
5. 注意事项
-
数据初始化:
- 应用级数据在
App.onLaunch中初始化 - 页面数据在
Page.onLoad中初始化 - 组件数据在
Component.attached中初始化
- 应用级数据在
-
网络请求:
- 页面的主要数据请求应在
Page.onLoad中进行 - 需要每次页面显示都刷新的数据可在
Page.onShow中请求
- 页面的主要数据请求应在
-
资源释放:
- 页面资源释放应在
Page.onUnload中进行 - 组件资源释放应在
Component.detached中进行
- 页面资源释放应在
-
性能优化:
- 避免在
App.onLaunch中进行耗时操作 - 合理使用
Page.onReady进行视图相关操作
- 避免在
-
页面栈限制:
- 微信小程序页面栈最多10层,超过会导致无法正常跳转