this.setData估計是小程序中最經常用到的一個方法,但是要注意其實他是有限制的,忽略這些限制的話,會導致數據無法更新
setData的反模式:
這里重點說一下第3點,獲取更新列表的時候非常容易觸犯第三點,舉個栗子: Page({ data: { items: [], } }); 一般情況下,更新items的操作可能如下: loadItems() { //假設通過API獲取到新的列表數據:newItems const { items } = this.data; this.setData({ items: items.concat(newItems) }) } 如果完整items的數據量不大的時候,這樣做也是可以的,但是列表的數據比較多的時候,后面loadItems時setData的數據就會變很大,超過一定值(1048576)后就會報以下錯誤,然后列表無法再加載更多
若遇到這樣的情況,我的解決方法是 loadItems() { //依然假設通過API獲取到新的列表數據: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) } 以上是我開發時遇到的坑,歡迎大家探討指導,感謝閱讀 |