一般來說形真,小程序下拉加載數(shù)據(jù)抡砂,用合并數(shù)組的方式(concat)然后再setData新的數(shù)組,這種方式只是試用數(shù)據(jù)量小的時(shí)候窒篱,為什么這么說焕刮,因?yàn)樾〕绦虻膕etData有一個(gè)限制,每次setData數(shù)據(jù)不能超過1024kb舌剂,大家可以想象一下济锄,如果用concat合并產(chǎn)生新數(shù)組,并保存新數(shù)組為下一次加載的原數(shù)組霍转,那么數(shù)量大的時(shí)候肯定會出現(xiàn)數(shù)據(jù)的大小超過1024KB的限制荐绝,那么這種問題該怎么解決呢,說解決方法的時(shí)候先了解下小程序渲染的過程
這可以這樣理解小程序已經(jīng)把數(shù)據(jù)和視圖綁定了起來避消,眾所周知vue是數(shù)據(jù)雙向綁定的低滩,數(shù)據(jù)改變,視圖也會相應(yīng)的改變岩喷,而上面的那段話是不是可以理解為小程序也是雙向綁定的恕沫,
在vue里修改數(shù)據(jù)可以寫 this.a = b
小程序里修改數(shù)據(jù)需要? this.setData({"key":value})
那我們是不是可以這樣理解在小程序修改數(shù)據(jù)的時(shí)候只是調(diào)用setData方法修改了定義中的變量,
跟vue中this.a = b 是一樣的性質(zhì)而只是寫法不一樣
明白了纱意,這一點(diǎn)婶溯,說解決方法。偷霉。迄委。
上面說了數(shù)據(jù)量大的時(shí)候不能用concat的原因,那我們這時(shí)候該怎么解決类少,只是我們可以想叙身,既然數(shù)據(jù)和視圖綁定在一起了,我們是不是可以用一個(gè)二維數(shù)組解決這個(gè)問題
大概思路是這樣的
1硫狞,在data里定義一個(gè)空數(shù)組信轿,
2晃痴,獲取下拉數(shù)據(jù)
3,把獲取的數(shù)組财忽,this.setData上面定義的數(shù)組
例如this.setData({
? ? [`arr[$倘核]`]:res.data
})
這樣就避免了setData數(shù)據(jù)過大而不報(bào)錯(cuò)的問題。
這時(shí)候數(shù)組發(fā)生了改變視圖也會相應(yīng)的改變定罢,不過這樣可能會出現(xiàn)一個(gè)問題笤虫,如果加載數(shù)據(jù)過多的時(shí)候視圖會出現(xiàn)渲染層失敗旁瘫,