周期指程序从创建、到开始、暂停、唤起、停止、卸载的过程。下面从一下三个方面介绍微信 小程序 的生命周期:
应用生命周期
页面生命周期
应用生命周期影响页面生命周期
应用生命周期
1、用户首次打开小程序,触发 onLaunch(全局只触发一次)。
2、小程序初始化完成后,触发onShow方法,监听小程序显示。
3、小程序从前台进入后台,触发 onHide方法。
4、小程序从后台进入前台显示,触发 onShow方法。
5、小程序后台运行一定时间,或系统资源占用过高,会被销毁。
前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
页面生命周期
1、小程序注册完成后,加载页面,触发onLoad方法,一个页面只会调用一次。
2、页面载入后触发onShow方法,显示页面,每次打开页面都会调用一次。
3、首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。
4、当小程序后台运行或跳转到其他页面时,触发onHide方法。
5、当小程序有后台进入到前台运行或重新进入页面时,触发onShow方法。
6、当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack(),触发onUnload
wx.navigateTo跳转状态下,页面A和页面B的生命周期逻辑
1、进入A页面:A执行onLoad()-->onShow()-->onReady();
2、A页面navigateTo B页面:A执行onHide(),B执行onLoad()-->onShow()-->onReady();
3、B页面返回A页面:B执行onUnload(),A执行onShow();
4、退出A页面:A执行onUnload()。
应用生命周期影响页面生命周期
1、小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
2、当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
3、当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。
小程序的生命周期分为 应用生命周期 、 页面生命周期
App() 必须在 app.js 中调用,必须调用且 只能调用一次 ,app.js中定义了一些应用的生命周期函数
(1)onLaunch: 初始化小程序时触发,全局只触发一次
(2)onShow: 小程序初始化完成或用户从后台切换到前台显示时触发
(3)onHide: 用户从前台切换到后台隐藏时触发
(4)onError: 小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
后台:点击左上角关闭,或者按了设备 Home 键离开微信,并没有直接销毁,而是进入后台
前台:再次进入微信或再次打开小程序,相当于从后台进入前台。
官方介绍 https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html
js文件中定义了一些页面生命周期函数,下面简述下这些生命周期函数的方法作用
(1)onLoad:首次进入页面加载时触发,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
(2)onShow:加载完成后、后台切到前台或重新进入页面时触发
(3)onReady:页面首次渲染完成时触发
(4)onHide:从前台切到后台或进入其他页面触发
(5)onUnload:页面卸载时触发
官方介绍 https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html
通过console.log验证它们的触发顺序
以上是对生命周期粗略的认识,如有不足请指正~
参考链接 https://www.jianshu.com/p/2e48f2468d5f
在使用vue和小程序时,会发现一些生命周期钩子函数的异同之处:
首先看下图
这是8个vue生命周期钩子函数(为了方便阅读,其调用时间与方法均注释在函数中)
以下三种生命周期钩子函数是针对 keep-live 和 识别子元素错误时调用
同上,其调用均注释在函数中,方便理解;
这是小程序常用页面生命周期(运用注释在对应函数中)
以上为小程序其他页面函数
以上我们可以看到两种页面生命周期函数的异同点:
vue小程序中都具备页面创建,页面渲染,和页面销毁时候的调用钩子,但是在小程序中,结合其特别的存在,前后台执行、滑动滚动执行这一类钩子函数都为开发者配备的比较齐全;
另外还需要注意的是,在vue中的数据改变使用this.data直接进行更改即可,但是在小程序中,数据的改变需要调用this.setData() 进行改变(见上图)!
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)