小程序初探

207 阅读4分钟

前言

工作之余,尝试学习了一些小程序的相关知识,也做了几个demo,对小程序的开发有了一个基础的了解与认识,下面我简单说下我理解的小程序,也算是对自己这段时间的一个总结。

从几个demo中以及官方快递集成的代码来看,小程序的架构很清晰,类似MVVM的思想。JS负责相应的逻辑,WXML和WXSS来共同相应的视图,其中wxml类似xml,wxss类似css,对于有前端基础的人来说,学习起来难度不大。

项目结构

在新建的一个小程序的列表中,可以看到根目录有这几个文件。

10db1f64.png
项目中包含描述整体的app以及各个页面的page(微信上这么叫,包括 js、json、wxss、wxml,app中没有wxml)以及项目的配置文件project.config.json,其中

文件 描述
app.js 全局的逻辑
app.json 全局的公共设置,包括所有的页面以及tab、默认的标题等
app.wxss 公共样式

每个页面由四部分组成

文件 描述
.js 页面的逻辑(包括生命周期监听)
.json 页面的配置(标题、使用的component等)
.wxml 页面结构,框架设计的一种标签语言,结合基础组件、事件系统,可以构建出页面的结构
.wxss 样式 几乎支持所有的css样式

跟目录还有一个project.config.json,它可以做一些个性化的配置,比如界面颜色、编译配置等等。其中的es6写法深得我心。

生命周期

小程序的生命周期分为两个部分:应用生命周期和页面生命周期,先说一下页面的生命周期:

应用生命周期
//app.js

App({

onLaunch: function () {

}

})

这是初始化小程序项目中app的相关代码,可以看到主要是在onLaunch中做一些初始化的操作。这里简单说下应用的生命周期流程:

  1. 打开小程序时,会启动onLaunch方法,该方法只会执行一次,适合在这个方法中做一些初始化操作。
  2. 初始化完成后会走onShow方法来监听小程序的显示,该方法是会多次执行的,比如从后台切换到前台就会触发该方法。
  3. 相应的从前台切换到后台就会onHide方法,该方法也是会被多次调用的。
  4. 如果我们要打开的页面不存在就会触发onPageNotFound方法。
页面的生命周期

页面的生命周期要比应用的生命周期相对来说复杂一点,我们先来看下官方给的图:

页面生命周期
看这个图可能不是很好理解,我再来简单解释一下:

  1. 页面注册完成之后,加载页面会触发onLoad方法,一般会在这个方法中做一些网络请求或者是初步刷新数据的操作。
  2. 在页面载入之后会触发onShow方法,在后台切换到前台时也会触发onShow,前提是该页面可见。
  3. 在页面初次渲染完成会触发onReady方法。
  4. 当小程序从前台切换到后台时就会触发onHide方法。
  5. 当使用重定向方法wx.redirectTo(object)或关闭当前页返回上一页wx.navigateBack(),触发onUnload。同时,应用生命周期会影响到页面生命周期。

数据绑定以及渲染

学过react的应该知道在使用数据时要先声明,才能使用,不然就会报错。而小程序中的数据声明是在js中的data里,就像这样

Page({
  data: {
    message
  }
})
<text>{{message}}</text>

条件渲染和列表渲染在这里也有特别之处:

条件渲染

<view wx:if="{{isShow}}"></view>

列表渲染

<view wx:for="{{array}}" wx:for-item="item" wx:for-index="index">
  <text>{{item}}</text>
</view>
  • wx:for 制定数据的列表

  • wx:for-item`可以指定数组当前元素的变量名,

  • wx:for-index`可以指定数组当前下标的变量名

自定义组件

有时候我们需要自己定制一些组件,以让多数页面使用,这个时候就需要自定义组件。

比如我们要自定义一个dialogzu j组件,那么其json文件中要有这样的属性

{
  "component": true
}

还有就是dialog.js的不同,不再是Page来注册,也是要用Component来注册。

Component({

/**

 * 组件的属性列表

*/

properties: {

title: String

},

  

/**

 * 组件的初始数据

*/

data: {

  

},

  

/**

 * 组件的方法列表

*/

methods: {

  

}

})

在要使用的页面的json中要这样:

{
  "usingComponents": {

    "别名": "路径"

    }
}

如果要使用第三方的组件也要如此写。

总结

路漫漫而修远兮,我将上下而求索。知识无穷而学不止,自己学的还是一些基础,没有涉及到深层次的原理,需不断学习。

参考资料

小程序开发资源汇总 小程序官方文档