知識
不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現(xiàn)的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
微信小程序setData數(shù)據(jù)量過大問題的解決與分頁刷新加載的實現(xiàn) ...
發(fā)表時間:2021-2-28
發(fā)布人:葵宇科技
瀏覽次數(shù):157
問題:從綠色框中可以看出,顯示setData每次數(shù)據(jù)的上限是1024k,當數(shù)據(jù)量多大時,如何通過setData 來實現(xiàn)目的呢?
解決:從紅色框中可以看出,setData可以通過分批來對同一個data中的對象進行修改,而不是從新覆蓋某個data中的對象。
常規(guī)方式:通過setData提交數(shù)據(jù)的做法:
- 一次性將所有的dataList數(shù)據(jù)全部通過setData提交:
./dataList.js
Page({
// 頁面的初始數(shù)據(jù)
data: {
dataList: [],
},
// 生命周期函數(shù)--監(jiān)聽頁面加載
onLoad: async function () {
let dataList = [];
dataList = this.getDataListMethod();
this.setData({
dataList:dataList
})
},
// 獲取目標一維數(shù)組
getDataListMethod(){
let dataList = [];
.... // 獲取dataList具體操作
console.log(dataList);
// [{...},{...},...{...}]
return dataList;
};
})
分頁渲染方式:通過setData提交數(shù)據(jù)的做法:
- 將dataList列表數(shù)據(jù)分組后存放在頁面中,需要數(shù)據(jù)時,提交指定dataList中指定位置的數(shù)據(jù),只需要加載本次需要的數(shù)據(jù):
**注意:**改進后方案中的 dataList 與常規(guī)方案中的 dataList 已經不是同種數(shù)組,該方法通過二維數(shù)組,將源數(shù)據(jù)進行分組,每次頁面列表需要下拉加載數(shù)據(jù)時,通過調用loadingData()方法添加一組數(shù)據(jù)來對dataList進行更新數(shù)據(jù)渲染.
./dataList.js
let dataGroupList = [];
Page({
// 頁面的初始數(shù)據(jù)
data: {
pageNum: 0,
dataList: [],
},
// 生命周期函數(shù)--監(jiān)聽頁面加載
onLoad: function () {
let dataList = [];
dataList = this.getDataListMethod();
// dataGroupList已經在頁面首定義好了。
dataGroupList = this.groupArray(dataList, 10);
// 頁面加載時加載的數(shù)據(jù):
this.setData({
['dataList[0]']:dataGroupList[0]
})
},
// 頁面列表下拉,加載新數(shù)據(jù)
loadData: function(){
let pageNum = this.data.pageNum + 1;
// 本次要加載的數(shù)據(jù):
this.setData({
['dataList['+ pageNum +']']:currentLoadingData,
pageNum: pageNum
})
},
// 獲取目標一維數(shù)組
getDataListMethod: function () {
let dataList = [];
... // 獲取dataList具體操作
console.log(dataList);
// [{...},{...},...{...}]
return dataList;
},
/**
* 對一維數(shù)組進行二維化
* dataArray:源數(shù)組
* subGroupLength:子數(shù)組元素的個數(shù)
*/
groupArray: function(dataArray, subGroupLength) {
let start = 0;
let dataGroupArray = [];
while(start < dataArray.length) {
dataGroupArray.push(dataArray.slice(start, start += subGroupLength));
}
console.log(dataGroupArray);
// [ [{...},{...},...,{...}], [...], [...], ..., [...] ]
return dataGroupArray;
},
})
<!--dataList.wxml-->
<view wx:for="{{dataList}}" wx:for-item="pitem" wx:key="{{pindex}}">
<view wx:for="{{pitem}}" wx:for-item="item" wx:key="{{index}}">
<text>item.xxx</text>
<text>item.yyy</text>
</view>
</view>