微信小程序 ---- 分页列表

微信小程序在setData时会有一个传输上限,如果按照常规加载,每次数据来了都concat,会导致传输的数据越来越大。所以我们这次加载采用分页加载的方式,页面中的列表数据使用二维数组。

作为对比,我们每项的数据为一个{}
之前的数据格式是 --> listData: [{},{},{}, ....]
现在分页之后的二维数据 --> listData: [[{},{},{},{}],[{},{},{},{}]....]

这样的话,我们每次setData时只需要set当前那页的数据即可。

代码 ⬇️:页面中使用scroll-view的话,我个人的习惯会先给容器一个固定高度,在json文件中将disabledScroll设置为true(因为使用了自定义的navigationBar,阻止页面的滑动会避免滑动页面带着navBar一起走)。我这里设置的容器高度与页面一样,为100%。

wxml:

<view class="page-container" style="{{pageHeight}};{{pageTop}}">
  <scroll-view scroll-y style="width: 100%; height: 100%;" bindscrolltolower="toBottom">
    <view class="list-container">
      <block wx:for="{{listData}}" wx:for-item="list" wx:key="index">
        <block wx:for="{{list}}" wx:key="id">
          <view class="list-card" style="{{cardWidth}};{{cardMargin}}">
            <image src="{{item.coverUrl}}" mode="widthFix" class="image" />
            <view class="list-card_title">{{item.title}}</view>
          </view>
        </block>
      </block>
    </view>
  </scroll-view>
</view>

wxss:

.list-container {
  display: flex;
  flex-wrap: wrap;
}
.list-card {
  width: 45%;
  margin-left: 20px;
  border: 1px solid #000;
}
.image {
  display: block;
  width: 100%;
}

js:

  /**
   * 页面的初始数据
   */
  data: {
    listData: [],
    pagination: {
      pageNumber: 1,
      pageSize: 7
    }
  },
  setPageHeight() {
    // 这个方法作用是设置容器的样式,我用到utils里的方法,懒得粘贴了😂请自行调试
    this.setData({
      pageHeight,
      pageTop: `margin-top: ${navHeight}px;`
    })
  },
  async getList() {
    // 获取数据的方法
    const {workList} = await getWorkList(this.data.pagination);
    this.setData({
      [`listData[${this.data.pagination.pageNumber - 1}]`]: workList
    })
    // 一下代码项目不用,只是为了展示数据
    const currentPageNumber = this.data.pagination.pageNumber;

    console.log(`单次传输的数据,第${currentPageNumber}页 ---- `,workList);
    console.log(`页面中渲染的数据,第${currentPageNumber}页 ---- `,this.data.listData);
  },
  toBottom() {
    this.setData({
      ['pagination.pageNumber']: this.data.pagination.pageNumber + 1
    })
    this.getList();
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
      this.setPageHeight()
      this.getList()
  },

这样一个分页的列表就做好啦~我们可以看一下每次传输的数据以及页面中渲染的数据格式 ⬇️


tada~~~~一个可以在微信小程序中使用的分页加载列表就做好啦💃

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容