微信小程序的生命周期学习笔记-应用篇
在我们学习微信小程序的过程当中,我们会参考很多资料。在这些资料中,我们经常能够看到“生命周期”四个字,在前面的课程中也提到过。在这里做一个说明。
生命周期是一类函数的统称,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。他们的作用是负责监听一些操作或者状态,当到达了某些特殊的时间点或者发生了某些特殊的事件时,这些函数就会触发,我们可以通过这种函数来在相应的时间点或事件下,实现我们的小程序应有的功能。
我们在小程序中主要研究三种生命周期:应用生命周期、页面生命周期、组件生命周期。
应用生命周期
应用生命周期也称小程序生命周期,是三种生命周期中相比之下比较易懂的一种,所以我们会重点介绍应用生命周期。掌握了应用生命周期可以为页面生命周期和组件生命周期的掌握做好基础。
应用生命周期主要包含五个函数:
属性 |
类型 |
必填 |
描述 |
---|---|---|---|
onLaunch |
Function |
否 |
监听小程序初始化 |
onShow |
Function |
否 |
监听小程序启动或切前台 |
onHide |
Function |
否 |
监听小程序切后台 |
onError |
Function |
否 |
错误监听函数 |
onPageNotFound |
Function |
否 |
页面不存在监听函数 |
onLaunch
我们在创建一个新的微信小程序项目时,打开app.json文件,我们就可以看到一个叫做onLaunch的函数,如图。
Luanch在英文中是“启动”的意思。onLaunch函数在小程序启动并完成初始化后触发,只触发一次。如上图,小程序在读取用户的一些信息,可以在小程序的其他地方使用。
我们现在重新编写onLaunch函数如下。
onLaunch: function () {
console.log("Launch");
}
这段程序所做的事情就是在小程序启动、完成初始化后,在调试器的console中输出一个“Launch”的字符串。
保存、编译后,我们在console中得到了“Launch”字符串,如图。
在onLaunch函数中,我们可以像其中添加自己想要进行的初始操作,例如获取用户信息、申请权限、获取服务器数据等,为小程序的后续功能提供方便。
onShow
Show,即为出现。在屏幕上从无到有,从非当前小程序变为当前小程序,即为出现一次。对于微信小程序的消失与重现,无非是从别的地方切到了这个小程序当中,把这个小程序切到了前台。
我们在onLaunch的同层级同样编写一个onShow函数如下,以测试onShow函数的执行时间点。(下面测试的onHide、onError和onPageNotFound都是在这个层级)
onShow: function () {
console.log("Show");
}
在开发者工具中,有切后台的测试功能,即模拟各种情况之中将小程序从后台切回前台的状况。我们随意选择几种,每次将小程序切回前台,都会输出一个“Show”字符串。请大家自己尝试。
这里需要注意的是,小程序启动、进行初始化的时间点也属于出现一次。
将onShow函数和onLuanch函数放到一起,重新启动小程序,会发现,onLuanch的执行时间点早于onShow的执行时间点。
onHide
Hide,即为隐藏。与onShow相反,onHide的时间点是微信小程序被切到后台时开始执行。通过onHide函数,我们可以实现小程序被切到后台后,计时器暂停计时、统计切后台次数等自己想要的功能。
测试代码如下:
onHide: function () {
console.log("Hide");
}
和之前的测试代码一样,在执行onHide函数时我们会在console中得到一个“Hide”字符串。
当我们点击开发者工具中切后台的按键的一瞬间,就可以得到“Hide”字符串了。大家可以自行尝试。
onError
Error是错误的意思。onError函数的执行时间点是在我们的代码运行出错时执行。
onError测试代码如下:
onError: function (err) {
console.log("Error");
console.log(err);
}
onError函数与其他函数不同,我们需要传递一个参数err来记录错误内容。当然这里给参数起的名字是err,起别的名字也可以,根据自己的习惯来命名即可。
这里我们给了onError函数两个任务:当代码执行出错时,先在console中输出“Error”字符串,然后把错误信息输出出来。
至于测试的方法有很多,例如我们可以在onLaunch或onShow中随便加一行错误代码,如下:
onShow: function () {
console.log("Show");
abc
}
这里abc就是一行错误代码。之所以会想到用onLaunch和onShow,是因为这两个函数在小程序一启动就会执行,方便测试。大家自己尝试。
onPageNotFound
Page Not Found,是页面没有找到的意思。换言之,我们提供的页面不存在,导致代码执行出现了错误。但是,在应用生命周期中的这个onPageNotFound,触发是有一定条件的,它只有在小程序最初启动时找不到启动页面才会触发,其他情况下不会触发。所谓的启动页面,可简单理解为小程序运行后的第一个页面。
我们先把测试代码写好:
onPageNotFound: function () {
console.log("PageNotFound");
}
我们的测试方法是:更改编译模式。
我们首先在开发者工具的上方找到编译设置,点击普通编译右侧的倒三角,如图。
选择“添加编译模式”,修改里面的启动页面,将其中的页面修改成一个不存在的页面即可。大家可以自行测试。修改后编译,就会在console中输出“PageNotFound”的字符串了。
对于其他的找不到页面的情况,我们也可以去测试。例如在启动初始化时我们想要跳转到一个不存在的页面,这种情况下不触发onPageNotFound函数,我们可以在onLaunch函数中做出如下改动:
onLaunch: function () {
wx.navigateTo({
url: 'pages/123/123',
})
}
我们在js文件和json文件中用wx.navigateTo实现导航功能,其效果与我们在wxml文件中写的
<navigate url="pages/123/123">abc</navigate>
相同。这里不进行详细介绍。
测试后我们会发现,这种情况下onPageNotFound不会被触发。
与应用生命周期相关的API
与应用生命周期相关的较主要的API有两种:
属性 |
类型 |
描述 |
---|---|---|
wx.getLaunchOptionsSync() |
Object |
获取小程序启动时的参数 |
wx.getEnterOptionsSync() |
Object |
获取本次小程序启动时的参数 |
wx.getLaunchOptionsSync()
微信开放文档中的介绍:获取小程序启动时的参数,与App.onLaunch的回调参数一致。
我们先在onLaunch函数中写如下代码,以作测试:
onLaunch: function () {
console.log(wx.getLaunchOptionsSync());
}
这段代码可以将wx.getLaunchOptionsSync()的返回值在console输出。运行后可以得到如下结果:
这些都是onLaunch函数的回调参数,我们可以通过wx.getLaunchOptionsSync()来获取这些参数。
wx.getLaunchOptionsSync()的相关值和referredInfo的结构,以及返回有效referredInfo的场景,详见微信开放文档:
https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html
wx.getEnterOptionsSync()
微信开放文档中的介绍:获取本次小程序启动时的参数。如果当前是冷启动,则返回值与 App.onLaunch 的回调参数一致;如果当前是热启动,则返回值与 App.onShow 一致。
冷启动,可以理解为小程序第一次启动,需要进行初始化的启动,根据之前我们的学习可知,进行初始化后,小程序将执行App.onLaunch和App.onShow两个函数。此时的wx.getEnterOptionsSync()返回App.onLaunch的参数。
热启动,可以理解为已经热过身一般,已经运行过,即为从后台将小程序切到前台。根据之前我们的学习,此时小程序只执行App.onShow。那么wx.getEnterOptionsSync()返回App.onShow的参数。
onShow: function () {
console.log(wx.getEnterOptionsSync());
}
大家可以通过上面的代码,分别对以下两种情况进行测试:
a.冷启动:编译后运行
b.热启动:切后台后返回小程序
观察两种情况的结果,与之前我们测试wx.getLaunchOptionsSync()所得到的结果相比对,大家可以自己尝试。
其他与应用生命周期有关的API
获取参数的应用级事件
属性 |
对应的应用生命周期 |
---|---|
wx.onAppShow |
App.onShow |
wx.onAppHide |
App.onHide |
wx.onError |
App.onError |
wx.onPageNotFound |
App.onPageNotFound |
取消监听的应用级事件
属性 |
取消监听 |
---|---|
wx.offAppShow |
小程序切前台事件 |
wx.offAppHide |
取消监听小程序切后台事件 |
wx.offError |
取消监听小程序错误事件 |
wx.offPageNotFound |
小程序要打开的页面不存在事件 |
此处不对以上API做详细介绍。大家可以借鉴上文介绍的两个API的研究方法,来对这些API进行学习。
- go语言实现sqrt的方法
- Go语言实现set
- Docker新手入门实战教程
- Python远程控制模块paramiko遇到的问题及解决记录
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- WordPress集成PHP缩略图,并开启Nginx缓存的方法
- 分享几个WordPress本地缓存gravatar评论头像的方案
- Linux下的mongodb服务脚本,以备不时之需
- WordPress发布文章主动推送到百度,加快收录保护原创
- Nginx开启fastcgi_cache缓存加速,支持html伪静态页面
- Go-指针、传值与传引用、垃圾回收
- SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法
- Go-defer,panic,recover
- SEO技巧:Shell脚本自动提交网站404死链到搜索引擎
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Cypress系列(45)- cypress-skip-and-only-ui 插件详解
- 多线程基础(五):java对象的MarkWord及synchronized锁升级过程
- 【每日一题】45. Jump Game II
- 「Elasticsearch + Lucene」搜索引擎的架构、倒排索引和搜索过程
- 查看 MAC JDK默认安装路径 JAVA路径 的shell 命令
- Gradle 命令行介紹和安裝教程
- Spring工厂创建复杂对象
- Nginx反向代理配置去除前缀
- 深入浅出java虚拟机
- Maven resources 分环境
- JetBrains Upsource(上源) 研究
- Spring JPA 拓展
- python自学成才之路 死锁的解决方案
- C++核心准则T.40: 使用函数对象向算法传递操作
- web页面性能优化总结及原理解释