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