基于微信小程序云开发实现分页查询功能

一、前言

hello,大家好呀~
很久没写博客啦~开局先来吹一下水,凑一下字数。

本文是微信小程序云开发的入门篇(算是吧?),主要是实现基于云开发下的数据分页获取。

二、为啥要分页

原因主要有以下3点:
1、数据条数限制
小程序端单次请求数据条数限制为20条,云函数端为1000条。

2、小程序端的性能
即使走云函数,一次性拿几百条,对于小程序端来说也有渲染性能上的损耗,所以一般项目上基本都是按需拿,一次拿20-50条。

3、节省资源
目前云开发的价格计算方式已经改变,同时价格相对来说有所上涨,所以为了节省资源,也需要做一下分页。

三、实现的需求

本文实现的需求很简单,首先从数据库读取20条数据,当页面触底后,再去拉去20条数据依次类推,实现分页的效果。

我事先准备了100条数据作为测试,分页效果看下方视频。

云开发分页效果

四、代码实现

因为比较简单,所以就只放JS代码了。代码内已经添加注释了。

JS实现代码

const db = wx.cloud.database()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    dataList: [],
  },

  onLoad() {
    this.initData()
  },

  /**
   * 初始化数据
   */
  async initData() {
    wx.showLoading({
      title: "加载中",
      mask: true
    })
    const dataList = await this.getDataList()
    this.setData({ dataList })
    console.log("dataList ==>", dataList)
    wx.hideLoading()
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  async onReachBottom() {
    const dataList = this.data.dataList
    const nowLen = dataList.length
    // 当数据少于20条时,则说明符合条件的数据不足20条了不需要分页
    if (nowLen < 20) {
      wx.showToast({
        title: "已经加载完毕啦",
        icon: "none"
      })
      return
    }
    wx.showLoading({
      title: "加载更多中",
      mask: true
    })
    const newDataList = await this.getDataList(20, nowLen)
    wx.hideLoading()
    // 没有新的数据了
    if (newDataList.length === 0) {
      wx.showToast({
        title: "已经加载完毕啦",
        icon: "none"
      })
      return
    }

    // 拼接数据并进行渲染
    this.data.dataList = dataList.concat(newDataList)
    this.setData({
      dataList: this.data.dataList
    })
  },

  /**
   * 获取数据
   * @param {*} limit 本次获取的条数
   * @param {*} skip 跳过的条数
   */
  async getDataList(limit = 20, skip = 0) {
    const dataListObj = await db.collection("addTest").where({}).limit(limit).skip(skip).get()
    return dataListObj.data
  },

})

WXML

布局也简单放一下吧。

<view class="data-item" wx:for="{{dataList}}" wx:key="_id">
 {{index + 1}}、{{item.name}} ---- {{item.age}}
</view>

五、常规结语

代码为最简单的例子,仅供参考,实际开发中的其他逻辑就不写了。需要同学们自己去考虑异常情况处理等问题啦。

有任何疑问可以在评论区留下。我每天都会进行回复,私聊不回。(为了刷积分)

以上均是本人开发过程中的一些经验总结与领悟,如果有什么不正确的地方,希望大佬们评论区斧正。

💥最后!!!不管这篇文章对你有没有用,既然都看到最后了。
👍赞一个!!!
🤩当然,顺带收藏就最好了。
😎欢迎转载,原创不易,转载请注明出处✍。

😊如果你对小程序开发有兴趣或者正在学习小程序开发,可以关注我。每一篇都是原创,每一篇都是干货噢~。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序云开发本身并不提供分页功能,但我们可以通过一些方法来实现分页的效果。 一种常见的方法是通过云函数来实现分页查询数据。我们可以使用云函数调用数据库的查询操作,通过指定查询的数量和跳过的数量来实现分页效果。具体步骤如下: 1. 在云函数中引入 `wx-server-sdk`,并初始化云开发环境: ```javascript const cloud = require('wx-server-sdk') cloud.init() ``` 2. 在云函数中编写查询操作。可以使用 `db.collection()` 方法获取数据库集合对象,然后使用 `skip()` 和 `limit()` 方法来设置跳过的数量和返回的数量。例如,查询第 2 页数据,每页显示 10 条记录: ```javascript // 云函数入口函数 exports.main = async (event, context) => { const db = cloud.database() const collection = db.collection('your_collection') const page = event.page || 1 // 当前页码,默认为第一页 const pageSize = event.pageSize || 10 // 每页显示数量,默认为 10 try { const totalResult = await collection.count() // 获取总记录数 const total = totalResult.total const totalPage = Math.ceil(total / pageSize) // 总页数 const skip = (page - 1) * pageSize // 跳过的数量 const result = await collection.skip(skip).limit(pageSize).get() // 查询数据 return { code: 0, data: { list: result.data, total, totalPage } } } catch (err) { console.error(err) return { code: -1, data: [] } } } ``` 3. 在小程序端调用云函数,并传入相应的参数(当前页码和每页显示数量): ```javascript wx.cloud.callFunction({ name: 'your_cloud_function', data: { page: currentPage, pageSize: pageSize }, success: res => { const result = res.result if (result.code === 0) { const list = result.data.list const total = result.data.total const totalPage = result.data.totalPage // 处理返回的数据 } else { // 处理错误情况 } }, fail: err => { console.error(err) } }) ``` 上述方法是一种基本的分页实现方式,你可以根据具体需求进行修改和优化。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super--Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值