小程序setData()超限怎么办

本文介绍了一种解决小程序翻页时遇到setData限制问题的方法。通过将列表渲染过程分为两步,并利用全局变量暂存数据,避免了单次setData操作超过1024KB的限制,实现了高效稳定的大数据量翻页效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个翻页交互,遇到点setData的坑,最后想了个办法给绕过去了,但我不知道各位有没有更好的办法,在这里分享下我的处理办法;

例如我有个列表,这个列表的总数据量不确定有多少,经我们产品交代,大促期间,至少会有1000条,从小程序的开发文档里可以看到setData对数据的限制是1024KB,因为之前我看文档时没有注意到这一点,所以我一开始在做分页的时候就用了错误的方法,上代码:

wxml:

 

<sku-item

   wx:for="{{skuList}}"

   skuData="{{item}}"

   actId="{{actId}}"

   wx:key="{{item.skuid}}"/>

 

 

js:

 

data: {

   skuList: []

},

loadMore: function() {

   request(function(res) {

       this.setData({

           skuList: this.data.skuList.concat(res.list)

       });

   })

}

 

 

好,这样写,问题就出来了,当数据量慢慢的累积起来,就会触发1024KB阈值,后面的数据就算能取回来,也set不进去了。

于是我想了一个解决方案:

把之前的渲染流程拆成两步来做,第1步: 先想办法把每页的坑位给渲染出来,于是我搞了一个skuPage组件, 在这个组件中来单独做每页的sku渲染:

wxml:

 

<sku-item

   wx:for="{{skuList}}"

   skuData="{{item}}"

   actId="{{actId}}"

   wx:key="{{item.skuid}}"/>

 

js:

 

data: {

   skuList: []

},

methods: {

   setListData: function () {

       let _this = this;

       this.setData({

           skuList: app.globalData.skuList

       });

       app.globalData.skuList = [];

   }

},

ready: function() {

   this.setListData();

}

 

 

在外部页面中调用skuPage组件:

wxml:

 

<sku-page

   class="sku-page"

   wx:for="{{pageWrapCount}}"

   wx:key="{{index}}"

   actId="{{actId}}"/>

 

js:

 

data: {

   pageWrapCount: []

},

loadMore: function() {

   app.globalData.skuList = res.list;

   request(function(res) {

       this.setData({

           pageWrapCount: this.data.pageWrapCount.concat([1])

       });

   })

}

 

好,这样我们把取回的数据先不要立马set进去,而是把它先丢在global里,然后让坑位+1,这样skuPage就会新增一个,就会触发skuPage的ready钩子函数,这个时候再在skuPage的ready钩子中,从global中把list取过来丢给skuPage组件的skuList,让skuPage组件去渲染,这样就能绕开setData的1024KB上线,因为每次针对于坑位来说

 

 

this.setData({

  pageWrapCount: this.data.pageWrapCount.concat([1])

});

 

 

我只对pageWrapCount数组push(1); 就算有1024KB限制,那也远远足够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值