前言

写博客主要是用来总结、巩固知识点,加深自己对这个知识点的理解。同时希望能帮助到有需要的人。如有不正确的地方。可以在评论区指出。你们的支持。是我不断进步的源泉。

小程序处理列表的简单方法

在项目中遇到数据量比较大的时候都会采用分页来进行数据展示。在小程序中也不列外。我们可以可以通过 onReachBottom(页面上拉触底事件)这个方法来实现分页请求。直接看代码:

请求列表数据的方法

  loadList() {let _that = this;App.Hq.promiseRequest({url: url,data: {"Page": {"PageSize": 20,"PageIndex": _that.data.PageIndex}},method: 'POST',}).then((res) => {if (res.Success) {if(_that.data.PageIndex===1){_that.setData({list:res.List})}//把其他也的数据通过concat方法拼接到_that.data.list中else if(_that.data.PageIndex>1){_that.setData({list:_that.data.list.concat(res.List)})}}else if (res.Code === -2000) {App.getToken(_that.loadNews);return false;} else {App.Hq.tipMask('请求失败', '/static/image/tip.png');App.getLog(16, `${res.Message}`, '用户端/evaluate页面/方法/loadNews');}})
复制代码

页面上拉后触底加载更多页数据

// 上滑加载更多    onReachBottom: function() {let _that = this;//上滑一次当前页+1let currentPage = ++_that.data.PageIndex; //把新的当前页赋值给data对象里的PageIndex_that.setData({  PageIndex: currentPage})//把当前页根据服务器端返回的总页数进行比较,如果小于或者恒等于总页数则进行数据请求否则进行提示if (currentPage < _that.data.totalPage || currentPage === _that.data.totalPage) {_that.loadNews();} else {App.Hq.afterSend();_that.setData({showTips: false,})}}
复制代码

当然上面这种方法也是可以的,并没有错。在数据量比较少的时候这种方法还是ok的,但一旦数据量大的时候,该方法就不行了,甚至会导致程序闪退。这是什么原因呢?

这里我们能把list里的数据能在界面中显示出来,主要就是靠setData这个方法把数据从逻辑层传送到界面:关于具体的详情请看官网说明

关于setData有几点要注意:

1、直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。

2、仅支持设置可 JSON 化的数据。

3、单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。

4、请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

这里第三点提示我们通过setData设置的数据不能超过1024kb。如果按照上面的方法数据量大的时候单词给setData设置的数据超过1024kb的时候不知道会出现什么问题。有可能导致程序闪退。

在官方文档的优化建议里有这么段话:

更好的处理数据列表的方法

由此看来。上面那种方法并不是很可取:那还有其他方法吗?当然是有的了:

相对于上面的方法,我们只需要在数据存储上做一些小的改变,就能实现加载更多的数据而且不影响性能。这个方法就是再增加一个数组,用来存放数据。上一个方法中是把所有的数据都存放到一个数据中,这样数据量很容易就会变大。这个方法,将每一页请求过来的数据的引用放到一个新的数组dataArray内。dataArray[0]存放第一页数据,dataArray[1]存储第二页数据。请求新一页,都只需要更新一组数据,这样每次显示的数据就不会很大。

  loadList() {let _that = this;App.Hq.promiseRequest({url: url,data: {"Page": {"PageSize": 20,"PageIndex": _that.data.PageIndex}},method: 'POST',}).then((res) => {if (res.TotalPage === 1) {_that.setData({showTips: false})}let currentPage = _that.data.PageIndex - 1; //获取数组下标res.List.forEach(item => {let theDate = new Date((item.CreateTime).replace(/-/g, '/')).getTime();item.CreateTime = App.Hq.getDateDiff(theDate, item.CreateTime);})_that.setData({['list[' + currentPage + ']']: res.List,totalPage: res.TotalPage})}else if (res.Code === -2000) {App.getToken(_that.loadNews);return false;} else {App.Hq.tipMask('请求失败', '/static/image/tip.png');App.getLog(16, `${res.Message}`, '用户端/evaluate页面/方法/loadNews');}})
复制代码

总结

可能大家在项目中遇到的数据不会特别大。用第一种方法也没有发现不当的地方。(比如我一开始就使用的第一种方法)但总得来说在小程序中要尽量精简传输的数据字段。然后使用第二种数据处理的方法。可能会解决大部分问题。

参考资料: www.imooc.com/article/436…

小程序处理大量数据列表的方法相关推荐

  1. 小程序 | 小程序中常用的事件 + 事件对象的属性列表 +小程序事件传参 + 小程序全局配置 + 小程序页面配置 + 小程序发起网络数据请求

    文章目录 一.WXML 模板语法 数据绑定 事件绑定 ⭐小程序中常用的事件 ⭐事件对象的属性列表 target 和 currentTarget 的区别 bindtap 的语法格式 在事件处理函数中为 ...

  2. 小程序页面之间数据传递的五种方法

    小程序页面之间数据传递的五种方法 目录 小程序页面之间数据传递的五种方法 **使用 `wx.navigateTo()` 时,在 url 中拼接,这种方法适用于数据量少的情况** **使用 `wx.na ...

  3. Java小程序post如何传参,微信小程序向Java后台传输参数的方法实现

    微信小程序向Java后台传输参数的方法实现 首先,微信小程序我使用的是微信web开发者工具 想要向后台传输数据,需要在js中写 在微信小程序的官方文档中可以看到一个api叫wx.request它的作用 ...

  4. 微信小程序分页加载列表

    微信小程序分页加载列表: 项目开发时很多页面都需要用到分页加载列表,为了方便,自己封装了分页加载列表组件,下拉刷新列表,滑动至底部,加载更多 组件界面: 可以扫码查看是否符合自己的需求 wxml: & ...

  5. 微信小程序编写新闻阅读列表

    微信小程序编写新闻阅读列表 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 数据绑定(核心知识) 数据绑定的运算与逻 ...

  6. php小程序 100行左右,微信小程序 左右分类滚动列表

    今天需求个类似得到app分类的功能,效果如图: 左右分别滚动,互不干扰,先把简单的布局和样式搭好. 左侧分类 右侧顶部分类 右侧列表 .flex_row{display: flex;flex-dire ...

  7. 微信小程序开发07 数据监控:善用数据驱动产品迭代

    你好,我是俊鹏,今天我们一起学习如何打造小程序的数据监控体系. 前几年,我看了<人人都是产品经理>这本畅销书,我觉得它给了我们一个很有意义的启示:技术之外,多思考产品.而数据对产品的意义很 ...

  8. 小程序给内容做列表排名和信息分类归纳

    很久前学写的一个做医院排行和分类归纳的小程序,今天就把其中的一部分内容分享出来. 先上效果图给大家看看: 可以进行前三排名,还可进行综合医院和三甲医院排名. ###当然你要是活学活用的话可以演变为很多 ...

  9. 微信小程序开发(五)小程序条件渲染和列表渲染

    说到条件,相比大家都是很熟悉的了,要么符合什么什么条件,要么不符合什么什么条件,在我们的编程里就是if else,从if开始到else结束.比如我们说小明的考试成绩出来了,如果分数大于60分及格,不然 ...

最新文章

  1. SpringMvc4中获取request、response对象的方法
  2. JSON调试找不到 net.sf.ezmorph.Morpher问题解决
  3. windows查看端口占用的进程和杀死进程
  4. 【拓扑排序】【堆】CH Round #57 - Story of the OI Class 查错
  5. 往有序链表的插入元素使原链表依旧有序
  6. Linux下的文件共享全攻略系列之一:Samba服务器简介与快速配置指南
  7. 04_Nginx命令行参数,控制信号,Nginx启动、停止、重启命令
  8. django的models常用字段、属性
  9. 马哥Linux--elasticsearch
  10. 几个危险的扩展存储过程
  11. Atitit 二进制数据字节转字符串 base64 base16 Quoted-printable BINHEX
  12. 2048小游戏最佳算法C语言,2048游戏的最佳算法是什么?
  13. 华为认证hcia含金量_华为hcna认证含金量高吗?
  14. 基于R语言的分位数回归(quantile regression)
  15. 英雄联盟 python 刷等级_厉害了,30行python代码爬取英雄联盟全英雄皮肤
  16. Minecraft 从安装到入门
  17. 网站编辑企业如何应用智能员工节省了工资支出
  18. VIPKID前端面试题
  19. NOI试题(题目+答案)(三)(上)
  20. java代码拉马车游戏,8届省赛java 拉马车

热门文章

  1. 电竞游戏而生,这款高清显示器要逆天了~
  2. 阿里巴巴java编码规范——日志规约
  3. FreeRTOS 通信方式
  4. Facebook ATC弱网环境搭建
  5. Hive窗口函数详解
  6. 精选(36) 常见的五种MySQL高可用方案分析
  7. vue3安装axios以及vue3解决跨域问题
  8. 计算机设备没有音频,电脑没有音频设备怎么办,小编教你电脑没有音频设备怎么解决...
  9. 日常生活中使用的台式计算机,台式电脑显示没有音频设备怎么办
  10. Visual Studio 2005 下载地址 V8各种版本官方下载网址