小程序-生命周期与WXS脚本

生命周期

什么是生命周期

生命周期(Life Cycle)是指一个对象从创建 -> 运行 -> 销毁的整个阶段,强调的是一个时间段。

我们可以把每个小程序运行的过程,也概括为生命周期:

  1. 小程序的启动,表示生命周期的开始
  2. 小程序的关闭,表示生命周期的结束
  3. 中间小程序运行的过程,就是小程序的生命周期

生命周期的分类

在小程序中,生命周期分为两类,分别是:

  1. 应用生命周期(特指小程序从启动 -> 运行 -> 销毁的过程)
  2. 页面生命周期(特指小程序中,每个页面的加载 -> 渲染 -> 销毁的过程)

其中,页面的生命周期范围较小,应用程序的生命周期范围较大

什么是生命周期函数

生命周期函数:是由小程序框架提供的内置函数,会伴随着生命周期,自动按次序执行。

生命周期函数的作用:允许程序员在特定的时间点,执行某些特定的操作。例如,页面刚加载的时候,可以在 onLoad 生命周期函数中初始化页面的数据。

注意:生命周期强调的是时间段,生命周期函数强调的是时间点。

生命周期函数的分类

小程序中的生命周期函数分为两类,分别是:

  1. 应用的生命周期函数(特指小程序从启动 -> 运行 -> 销毁期间依次调用的那些函数)
  2. 页面的生命周期函数(特指小程序中,每个页面从加载 -> 渲染 -> 销毁期间依次调用的那些函数)

1.应用的生命周期函数

小程序的应用生命周期函数需要在 app.js 中进行声明,示例代码如下:

// app.js

App({

/**

* 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)

*/

onLaunch: function () {

console.log('onLaunch')

},

/**

* 当小程序启动,或从后台进入前台显示,会触发 onShow

*/

onShow: function (options) {

},

/**

* 当小程序从前台进入后台,会触发 onHide

*/

onHide: function () {

},

/**

* 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

*/

onError: function (msg) {

}

})

控制台输出:

2.页面的生命周期函数

小程序的页面生命周期函数需要在页面的 .js 文件中进行声明,示例代码如下:

// pages/info/info.js

Page({

/**

* 页面的初始数据

*/

data: {

},

/**

* 生命周期函数--监听页面加载

*/

onLoad(options) {

console.log(options)

},

/**

* 生命周期函数--监听页面初次渲染完成

*/

onReady() {

},

goBack(){

wx.navigateBack()

},

/**

* 生命周期函数--监听页面显示

*/

onShow() {

},

/**

* 生命周期函数--监听页面隐藏

*/

onHide() {

},

/**

* 生命周期函数--监听页面卸载

*/

onUnload() {

},

/**

* 页面相关事件处理函数--监听用户下拉动作

*/

onPullDownRefresh() {

},

/**

* 页面上拉触底事件的处理函数

*/

onReachBottom() {

},

/**

* 用户点击右上角分享

*/

onShareAppMessage() {

}

})

WXS 脚本

WXS(WeiXin Script)是小程序独有的一套脚本语言,结合 WXML,可以构建出页面的结构。

wxs 的应用场景

wxml 中无法调用在页面的 .js 中定义的函数,但是,wxml 中可以调用 wxs 中定义的函数。因此,小程序中 wxs 的典型应用场景就是"过滤器"。

wxs 和 JavaScript 的关系*

虽然 wxs 的语法类似于 JavaScript,但是 wxs 和 JavaScript 是完全不同的两种语言:

wxs 有自己的数据类型

number 数值类型、string 字符串类型、boolean 布尔类型、object 对象类型、function 函数类型、array 数组类型、date 日期类型、regexp 正则

wxs 不支持类似于 ES6 及以上的语法形式

  1. 不支持:let、const、解构赋值、展开运算符、箭头函数、对象属性简写、etc...
  2. 支持:var 定义变量、普通 function 函数等类似于 ES5 的语法

wxs 遵循 CommonJS 规范

  1. module 对象
  2. require() 函数
  3. module.exports 对象

基础语法

1. 内嵌 wxs 脚本

wxs 代码可以编写在 wxml 文件中的 <wxs> 标签内,就像 Javascript 代码可以编写在 html 文件中的 <script> 标签内一样。

wxml 文件中的每个 <wxs></wxs> 标签,必须提供 module 属性,用来指定当前 wxs 的模块名称,方便在 wxml 中访问模块中的成员:

2. 定义外联的 wxs 脚本

wxs 代码还可以编写在以 .wxs 为后缀名的文件内,就像 javascript 代码可以编写在以 .js 为后缀名的文件中一样。示例代码如下:

3. 使用外联的 wxs 脚本

在 wxml 中引入外联的 wxs 脚本时,必须为 <wxs> 标签添加 module 和 src 属性,其中:

  1. module 用来指定模块的名称
  2. src 用来指定要引入的脚本的路径,且必须是相对路径

示例代码如下:

WXS 的特点

1. 与 JavaScript 不同

为了降低 wxs(WeiXin Script)的学习成本, wxs 语言在设计时借大量鉴了 JavaScript 的语法。但是本质上,wxs 和 JavaScript 是完全不同的两种语言!

2. 不能作为组件的事件回调

wxs 典型的应用场景就是"过滤器",经常配合 Mustache 语法进行使用,例如:

但是,在 wxs 中定义的函数不能作为组件的事件回调函数。例如,下面的用法是错误的:

3. 隔离性

隔离性指的是 wxs 的运行环境和其他 JavaScript 代码是隔离的。体现在如下两方面:

  1. wxs 不能调用 js 中定义的函数
  2. wxs 不能调用小程序提供的 API

4. 性能好

  1. 在 iOS 设备上,小程序内的 WXS 会比 JavaScript 代码快 2 ~ 20 倍
  2. 在 android 设备上,二者的运行效率无差异
相关推荐
2401_857439691 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
迷雾漫步者1 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
SoraLuna2 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
向前看-2 小时前
验证码机制
前端·后端
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
燃先生._.3 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
高山我梦口香糖4 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235244 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式