uniapp11-页面触底加载api-onReachBottom(懒加载表格分页)

uniapp11-页面触底加载api-onReachBottom(懒加载表格分页)

1、onReachBottom的介绍和认识

先来看一下onReachBottom这个api,官方给我们的介绍也非常的简单

可在pages.json里定义具体页面底部的触发距离[onReachBottomDistance] (uniapp.dcloud.net.cn/collocation...%25EF%25BC%258C "https://uniapp.dcloud.net.cn/collocation/pages#globalstyle)%EF%BC%8C")

比如设为50,那么滚动页面到距离底部50px时,就会触发onReachBottom事件。

如使用scroll-view导致页面没有滚动,则触底事件不会被触发

总结一下

其实就是非常简单,当页面触底到一定的位置时候,触发滚动和方法。 onReachBottom 就是一个页面生命周期函数,用于监听页面滚动到页面底部时触发的事件。具体来说,onReachBottom 是在页面滚动到底部时触发的生命周期函数,类似于砸门网页开发中的 window.onscroll 事件
思考一下

那是不是我们可以使用它来进行我们的千万级别数据的懒加载呢,总不可能你有一千数据,我就直接后台给你返回一千数据吧!

应用场景

在比较常见的项目之中,一般我们会把这种应用于列表的懒加载上,然后对于用户体验进行优化!尤其是含有分页的时候,因为正常我们数据过多不可能一个一个进行加载!

2、页面搭建

接下来我们就尝试一下官方给我们介绍的onReachBottom的使用

  • 搭建我们的页面

我们先在项目之中写一个历史界面,名字上我们就叫做history,方便我们尝试这个api

写完了以后注意去我们的页面上配置触底距离!!!!!!!!重要!!!!

  • 在pages.json里面配置触底的距离

接下来直接去我们的配置界面去配置一下触底加载的距离需要多少,话不多说,我们直接上代码

3、vue2的写法

这里我们先简单看一下采用vue2

kotlin 复制代码
onReachBottom() {
        if (this.totalCount > this.msg.length) {
                this.form.pageNum++
                this.onlistin(); //执行的方法
        } else {

        }
},

这里我们简单调整为触底为100的时候然后触发这个页面滚动到底部的onReachBottom

json 复制代码
{
			"path" : "pages/component/history/history",
			"style" : 
			{
				"navigationBarTitleText" : "历史界面",
				"onReachBottomDistance": 100
			}
}

这个历史我们还是跟之前差不多放在首页部分

xml 复制代码
<view>
  <button @click="topage('/pages/component/history/history')">历史记录</button>
</view>

然后我们还是在首页点击这个历史记录,然后去我们的历史界面

接下来我们去完善一下历史界面然后看看效果

思路:

当我们首次进入页面的时候,我们先渲染10条数据,之后我们每次下拉到底部的时候就开始刷新,并且往我们之前的部分添加10条数据,达到懒加载的效果。

xml 复制代码
<template>
  <view class="container">
    <view v-for="(item, index) in itemList" :key="index" class="item">
      {{ item }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      itemList: [],
      page: 1,
    };
  },

  mounted() {
    // 监听页面滚动到底部事件
    // this.$onReachBottom(this.handleReachBottom);
	this.fetchData();
  },
  onReachBottom() {
	  console.log('11111');
  	   this.fetchData();
  },

  methods: {
    fetchData() {
      // 模拟异步加载数据
      setTimeout(() => {
        const newData = Array.from({ length: 10 }, (_, i) => `Item ${this.itemList.length + i}`);
        this.itemList = [...this.itemList, ...newData];
      }, 1000);
    },
  },
};
</script>

<style>
.container {
  padding: 20px;
}

.item {
  margin-bottom: 20px;
  padding: 10px;
  background-color: #f0f0f0;
  border-radius: 4px;
  text-align: center;
}
</style>

尝试一下我们使用这个进行懒加载的效果

效果还不错!挺完美的!

4、vue3的写法

接下来我们改成vue3的写法试试

xml 复制代码
<template>
  <view class="container">
    <view v-for="(item, index) in itemList" :key="index" class="item">
      {{ item }}
    </view>
  </view>
</template>

<script setup>
	import { onMounted ,ref} from "vue";
	const itemList=ref([]);
	const page=ref(1);
 
 onMounted(()=>{
	 fetchData();
 })

  const onReachBottom=()=> {
  	  console.log('11111');
  	   fetchData();
  }
  
 const fetchData=()=> {
   // 模拟异步加载数据
   setTimeout(() => {
     const newData = Array.from({ length: 10 }, (_, i) => `Item ${itemList.value.length + i}`);
     itemList.value = [...itemList.value, ...newData];
   }, 1000);
 }
</script>

<style>
.container {
  padding: 20px;
}

.item {
  margin-bottom: 20px;
  padding: 10px;
  background-color: #f0f0f0;
  border-radius: 4px;
  text-align: center;
}
</style>

问题分析

这里我们发现虽然可以直接用,但是监测不到

所以我猜测是可能在uniapp之中进行了封装,所以这里我们并没有全局注册,所以并没有办法直接使用

问题处理

这里我们直接尝试一下在uniapp之中使用官方给我们提供的方式进行使用

这里我们首先需要引入一下,然后再在页面之中进行使用

javascript 复制代码
import { onLoad, onShow ,onReachBottom} from "@dcloudio/uni-app";
 onReachBottom(() => {
    console.log('11111');
     fetchData();
 })

再次调用然后尝试一下。ok!毫无问题

功能没问题! ok!

相关推荐
过往记忆2 小时前
告别 Shuffle!深入探索 Spark 的 SPJ 技术
大数据·前端·分布式·ajax·spark
高兴蛋炒饭3 小时前
RouYi-Vue框架,环境搭建以及使用
前端·javascript·vue.js
m0_748240444 小时前
《通义千问AI落地—中》:前端实现
前端·人工智能·状态模式
ᥬ 小月亮4 小时前
Vue中接入萤石等直播视频(更新中ing)
前端·javascript·vue.js
神雕杨5 小时前
node js 过滤空白行
开发语言·前端·javascript
网络安全-杰克5 小时前
《网络对抗》—— Web基础
前端·网络
m0_748250745 小时前
2020数字中国创新大赛-虎符网络安全赛道丨Web Writeup
前端·安全·web安全
周伯通*5 小时前
策略模式以及优化
java·前端·策略模式
艾斯特_5 小时前
前端代码装饰器的介绍及应用
前端·javascript
Sokachlh5 小时前
【elementplus】中文模式
前端·javascript