在微信小程序中,生命周期 是指小程序从启动到销毁的整个过程,包括 App 生命周期、Page 生命周期 和 Component 生命周期。以下是详细的分类和说明:
1. App 生命周期
App
生命周期是指整个小程序的全局生命周期事件,主要包括以下事件:
事件 | 说明 |
---|---|
onLaunch |
小程序初始化完成时触发(全局只触发一次)。 |
onShow |
小程序启动时,或从后台进入前台显示时触发。 |
onHide |
小程序从前台进入后台时触发。 |
onError |
小程序发生脚本错误或 API 调用失败时触发。 |
onPageNotFound |
小程序要打开的页面不存在时触发。 |
onUnhandledRejection |
小程序未处理的 Promise 拒绝(rejection)时触发。 |
onThemeChange |
系统主题变化时触发(例如从浅色模式切换到深色模式)。 |
2. Page 生命周期
Page
生命周期是指单个页面的生命周期事件,主要包括以下事件:
事件 | 说明 |
---|---|
onLoad |
页面加载时触发,一个页面只会调用一次。 |
onShow |
页面显示时触发,每次打开页面都会调用。 |
onReady |
页面初次渲染完成时触发,一个页面只会调用一次。 |
onHide |
页面隐藏时触发,例如跳转到其他页面或小程序进入后台。 |
onUnload |
页面卸载时触发,例如页面被关闭或跳转到其他页面。 |
onPullDownRefresh |
用户下拉刷新时触发。 |
onReachBottom |
用户上拉触底时触发。 |
onShareAppMessage |
用户点击右上角分享时触发。 |
onPageScroll |
页面滚动时触发。 |
onResize |
页面尺寸变化时触发(例如屏幕旋转)。 |
onTabItemTap |
点击当前页面的 tab 时触发。 |
3. Component 生命周期
Component
生命周期是指自定义组件的生命周期事件,主要包括以下事件:
事件 | 说明 |
---|---|
created |
组件实例刚刚被创建时触发,此时还不能调用 setData 。 |
attached |
组件实例进入页面节点树时触发,此时可以调用 setData 。 |
ready |
组件布局完成时触发,此时可以获取节点信息。 |
moved |
组件实例被移动到节点树另一个位置时触发。 |
detached |
组件实例从页面节点树移除时触发。 |
error |
组件方法或事件处理函数抛出错误时触发。 |
4. 生命周期流程图
以下是微信小程序的生命周期流程图:
(1) App 生命周期流程
启动小程序 → onLaunch → onShow → 运行中 → onHide → 进入后台 → onShow → 恢复前台
(2) Page 生命周期流程
页面加载 → onLoad → onShow → onReady → 页面显示 → onHide → 页面隐藏 → onUnload → 页面卸载
(3) Component 生命周期流程
组件创建 → created → attached → ready → 组件运行 → moved → detached → 组件销毁
5. 示例代码
(1) App 生命周期示例
App({
onLaunch(options) {
console.log('小程序初始化完成', options);
},
onShow(options) {
console.log('小程序显示', options);
},
onHide() {
console.log('小程序进入后台');
},
onError(error) {
console.error('小程序发生错误', error);
}
});
(2) Page 生命周期示例
Page({
onLoad(options) {
console.log('页面加载', options);
},
onShow() {
console.log('页面显示');
},
onReady() {
console.log('页面初次渲染完成');
},
onHide() {
console.log('页面隐藏');
},
onUnload() {
console.log('页面卸载');
},
onPullDownRefresh() {
console.log('用户下拉刷新');
},
onReachBottom() {
console.log('用户上拉触底');
}
});
(3) Component 生命周期示例
Component({
lifetimes: {
created() {
console.log('组件创建');
},
attached() {
console.log('组件进入页面节点树');
},
ready() {
console.log('组件布局完成');
},
detached() {
console.log('组件从页面节点树移除');
}
}
});
6. 注意事项
-
生命周期顺序:
App
生命周期优先于Page
生命周期,Page
生命周期优先于Component
生命周期。- 例如,小程序启动时,先触发
App
的onLaunch
,再触发Page
的onLoad
。
-
onLoad
和onShow
的区别:onLoad
只会在页面加载时触发一次。onShow
会在每次页面显示时触发。
-
onReady
的使用:onReady
是页面初次渲染完成时触发,适合在此处操作页面 DOM 或初始化动画。
-
onUnload
的用途:onUnload
适合用于清理定时器、取消网络请求等操作。
-
Component
生命周期的兼容性:Component
生命周期需要基础库版本 1.6.3 及以上支持。
通过理解和使用这些生命周期事件,可以更好地控制小程序、页面和组件的初始化、运行和销毁过程,提升应用的性能和用户体验。
评论区