微信小程序生命周期
2022年7月5日
目的:整理目前为止遇到过的生命周期
微信小程序生命周期
小程序的生命周期包含
1. APP 生命周期--也可以官方叫注册小程序
onLaunch, onShow, onHide
onLaunch(Object object)小程序初始化完成时触发,全局只触发一次。参数也可以使用 wx.getLaunchOptionsSync 获取。 参数:与 wx.getLaunchOptionsSync 一致。只有在加载小程序的时候执行(加载包括 第一次进入小程序,小程序进程挂了重新进入时也会执行)onShow(Object object)小程序启动,或从后台进入前台显示时触发。也可以使用 wx.onAppShow 绑定监听。 参数:与 wx.onAppShow 一致onHide()小程序从前台进入后台时触发。也可以使用 wx.onAppHide 绑定监听。onError(String error)小程序发生脚本错误或 API 调用报错时触发。也可以使用 wx.onError 绑定监听。 参数:与 wx.onError 一致onPageNotFound(Object object)基础库 1.9.90 开始支持,低版本需做兼容处理。小程序要打开的页面不存在时触发。也可以使用 wx.onPageNotFound 绑定监听。注意事项请参考 wx.onPageNotFound。


2. 页面生命周期
onLoad, onShow, onReady, onHide
onLoad(Object query) 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。onShow() 页面显示/切入前台时触发。onReady() 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。注意:对界面内容进行设置的 API 如wx.setNavigationBarTitle,请在onReady之后进行。详见生命周期
onHide() 页面隐藏/切入后台时触发。 如 wx.navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。onUnload() 页面卸载时触发。如wx.redirectTo或wx.navigateBack到其他页面时。

页面本质上其实是一个组件(components 构造器),当作为组件构造器存在的页面,在lifetimes中执行 create attach等时和执行methods中的 onload onshow等其实是一样的,我理解是类似于Behavior中被重复执行了。所以这里我把 lifetimes 、 和methods 同级的 created attach 以及 pagelifetime 等等当在 components 构造器 中时就不要声明这些值了
- lifetimes就是组件的生命周期,但是这里是作为页面用因此在methods直接定义 onload等方法来做页面的生命周期更好,另外和methods同级的created attach这些函数会被 lifetime中的覆盖掉,lifetime都不要了所以更不需要;
- pagelifetime 本身含义就是一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义

3. 组件的生命周期
- lifetimes
created无 在组件实例刚刚被创建时执行,还不能是用 setData, data就是初始化的data,此时 只应该用于给组件 this 添加一些自定义属性字段。attached无 在组件实例进入页面节点树时执行 1.6.3 this.data 已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行ready无 在组件在视图层布局完成后执行 1.6.3moved无 在组件实例被移动到节点树另一个位置时执行 1.6.3detached无 在组件实例被从页面节点树移除时执行 1.6.3 detached 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则 detached 会被触发。errorObject Error 每当组件方法抛出错误时执行 2.4.1
- pagelifetimes
show无 组件所在的页面被展示时执行 2.2.3hide无 组件所在的页面被隐藏时执行 2.2.3resizeObject Size 组件所在的页面尺寸变化时执行 2.4.0
从截图组件的生命周期有个特点是先于页面的生命周期

补充关于
关于退出目前只看页面的话是 app onHide ---> page onHide