1. 生命周期
生命周期是一类函数的统称,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。他们的作用是负责监听一些操作或者状态,当到达了某些特殊的时间点或者发生了某些特殊的事件时,这些函数就会触发,我们可以通过这种函数来在相应的时间点或事件下,实现我们的小程序应有的功能。
小程序生命周期分为应用、页面和组件三个部分。
1.1 应用生命周期
初次进入小程序的时候,微信客户端初始化好宿主环境(我们称微信客户端给小程序所提供的环境为宿主环境。小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能。),同时从网络下载或者从本地缓存中拿到小程序的代码包,把它注入到宿主环境,初始化完毕后,微信客户端就会给App实例派发onLaunch事件,App构造器参数所定义的onLaunch方法会被调用。
进入小程序之后,用户可以点击右上角的关闭,或者按手机设备的Home键离开小程序,此时小程序并没有被直接销毁,我们把这种情况称为“小程序进入后台状态”,App构造器参数所定义的onHide方法会被调用。
当再次回到微信或者再次打开小程序时,微信客户端会把“后台”的小程序唤醒,我们把这种情况称为“小程序进入前台状态”,App构造器参数所定义的onShow方法会被调用。
我们可以看到,App的生命周期是由微信客户端根据用户操作主动触发的。为了避免程序上的混乱,我们不应该从其他代码里主动调用App实例的生命周期函数。
在微信客户端中打开小程序有很多途径:从群聊会话里打开,从小程序列表中打开,通过微信扫一扫二维码打开,从另外一个小程序打开当前小程序等,针对不同途径的打开方式,小程序有时需要做不同的业务处理,所以微信客户端会把打开方式带给onLaunch和onShow的调用参数options,示例代码以及详细参数如代码清单3-5和表3-2所示。需要留意小程序的宿主环境在迭代更新过程会增加不少打开场景,因此要获取最新的场景值说明请查看官方文档:场景值 | 微信开放文档
//app.js 小程序的生命周期函数在 app.js 中声明
App({
onLaunch: function() {
//小程序初始化(全局只触发一次)
// 在onLaunch函数中,我们可以像其中添加自己想要进行的初始操作,例如获取用户信息、申请权限、获取服务器数据等,为小程序的后续功能提供方便。
},
onShow: function(e) {
//小程序显示 可以获取进入小程序时的场景值
console.log(e)
},
onHide: function() {
//小程序隐藏
// onHide的时间点是微信小程序被切到后台时开始执行。通过onHide函数,我们可以实现小程序被切到后台后,计时器暂停计时、统计切后台次数等自己想要的功能。
},
onError: function(msg) {
//小程序错误
// onError函数的执行时间点是在我们的代码运行出错时执行
},
})
1.1.1 onLaunch
用户首次打开小程序,触发 onLaunch
(全局只触发一次)。
1.1.2 onShow
小程序初始化完成后,触发 onShow
方法,监听小程序显示。
1.1.3 onHide
小程序从前台进入后台,触发 onHide
方法。
1.1.4 onShow
小程序从后台进入前台显示,触发 onShow
方法。
1.1.5 onError
小程序出错,触发onError
onLaunch, onShow 方法会返回一个参数对象, 里面包含了三个参数 , path,query和scene ,path是打开小程序的路径
query是打开小程序页面url的参数,scene是打开小程序的场景值
更多场景值可以查看
场景值 | 微信开放文档
前台、后台定义: 当用户点击右上角关闭,或者按了设备返回键离开微信小程序,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台
2.1 页面的生命周期
页面初次加载的时候,微信客户端就会给Page实例派发onLoad事件,Page构造器参数所定义的onLoad方法会被调用,onLoad在页面没被销毁之前只会触发1次,在onLoad的回调中,可以获取当前页面所调用的打开参数option。
页面显示之后,Page构造器参数所定义的onShow方法会被调用,一般从别的页面返回到当前页面时,当前页的onShow方法都会被调用。
在页面初次渲染完成时,Page构造器参数所定义的onReady方法会被调用,onReady在页面没被销毁前只会触发1次,onReady触发时,表示页面已经准备妥当,在逻辑层就可以和视图层进行交互了。
以上三个事件触发的时机是onLoad早于 onShow,onShow早于onReady。
2.1.1 onLoad
onLoad
页面加载时触发,且只发生一次,可以理解为vue中的created。 一般用于获取上个页面传递的参数或数据的初始化操作
2.1.2 onShow
页面载入后触发onShow
方法,显示页面,可以理解为mounted。一般用于插件的初始化操作
2.1.3 onReady
onReady
页面初次渲染之后触发
2.1.4 onHide
离开本页面时,触发onHide
方法。
2.1.5 onUnload
当页面从页面栈中被销毁时,触发onUnload
方法