小程序模板網(wǎng)

說說微信小程序開發(fā)的那些坑--setData

發(fā)布時間:2018-04-26 12:07 所屬欄目:小程序開發(fā)教程

this.setData估計是小程序中最經(jīng)常用到的一個方法,但是要注意其實他是有限制的,忽略這些限制的話,會導致數(shù)據(jù)無法更新

setData的反模式:
-- 短時間頻繁進行setData操作
--頁面進入后臺后依然進行setData操作
-- 使用setData一次性設置太多的數(shù)據(jù)

這里重點說一下第3點,獲取更新列表的時候非常容易觸犯第三點,舉個栗子:
假設Page中data有items的數(shù)據(jù),裝著列表的數(shù)據(jù)

 Page({
  data: {
    items: [],
  }
});

一般情況下,更新items的操作可能如下:

loadItems() {
    //假設通過API獲取到新的列表數(shù)據(jù):newItems
    const { items } = this.data;
    this.setData({
    items: items.concat(newItems)
  })
}

如果完整items的數(shù)據(jù)量不大的時候,這樣做也是可以的,但是列表的數(shù)據(jù)比較多的時候,后面loadItems時setData的數(shù)據(jù)就會變很大,超過一定值(1048576)后就會報以下錯誤,然后列表無法再加載更多

數(shù)據(jù)傳輸長度為 xxxxxx 已經(jīng)超過最大長度 1048576

若遇到這樣的情況,我的解決方法是

loadItems() {
    //依然假設通過API獲取到新的列表數(shù)據(jù):newItems
    const { items } = this.data;
    const start = items.length;
    const updateItems = newItems.reduce((updateItems, item, index) => {
        const key = `items[${start + index}]`;
        updateItems[key] = item; 
        return updateItems;
    }, {})
  //updateItems 示例: { items[0]: 'content', item[1]: 'content', ... }
  this.setData(updateItems)
}

以上是我開發(fā)時遇到的坑,歡迎大家探討指導,感謝閱讀



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://m.u-renovate.com/wxmini/doc/course/24115.html 復制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×