微信小程序-setData()方法 的使用和注意事项(同步和异步)

1. setData的使用

Page.prototype.setData(Object data, Function callback)

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。

Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value

其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 array[2].messagea.b.c.d,并且不需要在 this.data 中预先定义。

 

 

2.  注意事项

  1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致
  2. 仅支持设置可 JSON 化的数据。
  3. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
  4. 请不要把 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();
  },

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值