1. setData的使用
Page.prototype.setData(Object data, Function callback)
setData
函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data
的值(同步)。
Object
以 key: value
的形式表示,将 this.data
中的 key
对应的值改变成 value
。
其中 key
可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 array[2].message
,a.b.c.d
,并且不需要在 this.data 中预先定义。
2. 注意事项
- 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
- 仅支持设置可 JSON 化的数据。
- 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
- 请不要把 data 中任何一项的 value 设为
undefined
,否则这一项将不被设置并可能遗留一些潜在问题。
3. 网络卡顿,出现数据未更新
因为setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data
的值(同步)。
可能出现的情景:
- Android下用户再滑动时会感觉到卡顿,操作反馈延迟严重,因为JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层
- 渲染出现延时时,由于WebView的JS线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不实时。
我的解决方案:这样保证我下拉刷新调用请求函数是,data里面的页数数据初始化成功了,再调用请求获取数据函数
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
this.setData({
page:1,
CurrentPageIndex:1,
},()=>{
// this.setData是异步,需要保证数据已经修改了以后再执行其他操作
if ('first' == this.data.changeTab) {
this.firstLists();
} else if ('second' == this.data.changeTab) {
this.secondlist()
}
})
//停止下拉刷新
wx.stopPullDownRefresh();
},