1、先碼為敬
數(shù)據(jù)結(jié)構(gòu)
speAllArr: [
{
id: '86',
classifyIIShowFlag: false,
firstData: {...}
...
},{
id: '87',
classifyIIShowFlag: false,
firstData: {...}
...
}
]
setData的解決方案
// 添加數(shù)據(jù)
this.setData({
['speAllArr[' + speAllArr.length + ']']: res.data
})
// 設(shè)置開(kāi)關(guān)
this.setData({
['speAllArr[' + dataset.index + '].classifyIIShowFlag']: !speAllArr[dataset.index].classifyIIShowFlag
})
2、再講道理
-
我們先說(shuō)setData:
微信小程序setData數(shù)據(jù)太大解決方案——setData介紹.png
setData 函數(shù)用于將數(shù)據(jù)從邏輯層發(fā)送到視圖層(異步),
同時(shí)改變對(duì)應(yīng)的 this.data 的值(同步)。
-
setData需要注意的事項(xiàng)
- 直接修改 this.data 而不調(diào)用 this.setData 是無(wú)法改變頁(yè)面的狀態(tài)的,
還會(huì)造成數(shù)據(jù)不一致。 - 僅支持設(shè)置可 JSON 化的數(shù)據(jù)。
- 單次設(shè)置的數(shù)據(jù)不能超過(guò)1024kB,請(qǐng)盡量避免一次設(shè)置過(guò)多的數(shù)據(jù)。
- 請(qǐng)不要把 data 中任何一項(xiàng)的 value 設(shè)為 undefined ,
否則這一項(xiàng)將不被設(shè)置并可能遺留一些潛在問(wèn)題。
- 直接修改 this.data 而不調(diào)用 this.setData 是無(wú)法改變頁(yè)面的狀態(tài)的,
-
如何解決需要設(shè)置的數(shù)據(jù)量過(guò)大的問(wèn)題呢
使用中括號(hào) 當(dāng)然, 是英文的 " [] ",
文檔上也寫(xiě)得很清楚, data可接受的值是Object;
我們只要吧這個(gè)Object傳進(jìn)去就OK了;- 比如說(shuō)我有一個(gè)數(shù)組, 當(dāng)我改變數(shù)組中一個(gè)值的時(shí)候,
講道理我只需要跟新這個(gè)值就行了 - 道理是這樣 如何才能指定更新到這個(gè)值呢?
- 用中括號(hào), 把需要修改的key值拼接起來(lái)就OK了!
this.setData({ ['tempArr[' + needChangeArrIndex + '].flag']: true, })- 這樣就可以避免 setData的數(shù)據(jù)太大 帶來(lái)的問(wèn)題啦~
- 當(dāng)然你也可以這樣寫(xiě):
const key = `tempArr[${needChangeArrIndex}].flag`; theSetData[key] = true; this.setData(theSetData) - 比如說(shuō)我有一個(gè)數(shù)組, 當(dāng)我改變數(shù)組中一個(gè)值的時(shí)候,
