直接先来看看微信官方的描述:
Page.prototype.setData(Object data, Function callback)
setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。
参数说明
字段
类型
必填
描述
最低版本
data
Object
是
这次要改变的数据
callback
Function
否
setData引起的界面更新渲染完毕后的回调函数
1.5.0
Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value。
其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。
注意:
1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
2. 仅支持设置可 JSON 化的数据。
3. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
4. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。
对注意第一点的理解,我们可以通过微信官方的例子理解下:
没有直接修改this.data,而是用this.setData:
页面的值跟着改变,页面得到渲染。
而对注意第二点的理解,何为可 JSON 化的数据?
是一种数据格式。数据的两个重要方面:一个是传输,一个是存储。XML也是一种数据格式。今天Json在数据传输上是主流。Json数据格式涉及到两个方面的问题一个是将数据格式化 --- 序列化Json一个是解析数据 --- 解析Json。使用Json主要用来表示对象和数组这样的复杂数据结构,当然也可以表示基本数据类型(String, Boolean, Number, Null, Undefine)。用代码表示为:
data: {
text: 'init data',
Boolean:0,
num: 5,
null:null,
//undefine:undefine,//注意的第4点,不能设置undefine
array: [{ text: 'init data' }],
object: {
text: 'init data'
}
}
至于,注意的第3点字面理解即可了,注意的第4点上面代码已经说明。
在这编文章里我们只聊setData()使用方法的理解,至于它背后的工作原理以及优化,在官方文档里有说明(在以后我会通过代码清楚的展示下),其实简单使用的话理解上面这4点已经足够了。