【uniapp】Vue3移动端滚动加载 分页组件的封装

今天用uniapp开发时想用vue3的组合式函数封装一个分页组件,如果是vue2自然就是用mixin了,因为组合式函数更灵活简洁,而且现在也写习惯了,还是决定封装一个vue3版的。

思路:

因为uniapp特有的对一些小程序生命周期的支持,比如onReachBottom可以直接监听页面到底,因此实现滚动加载其实很简单:

1.到页面底部给页数+1,同时判断是否正在加载中。

2.如果可以继续加载就推入list,然后通过接口返回的total和目前list长度判断后续是否还能继续加载。

3.搭配uni-load-more这个底部的加载样式组件,改变status和显示的文字contentText即可。

很坑的是,uniapp虽然说是支持vue3,文档里几乎没有vue3的示例代码,而且根据论坛里反馈的,对vue3.2的支持还不太好。我本来想尝试用vue3.2的script setup写法,却发现小程序的生命周期,像是分页时会用到的onReachBottom,根本没办法引入。最后只好用setup函数。

代码:

// usePagination.js
import {reactive,toRefs
} from 'vue';export default function usePagination(getData) {const state = reactive({status: 'more',page: 1,total: 0,list: [],contentText: {contentdown: '查看更多',contentrefresh: '加载中',contentnomore: '没有更多了'},isLoadMore: false});async function handleReachBottom() {if (state.status === 'more' && !state.isLoadMore) {state.isLoadMore = true;state.page += 1;await handleLoadMore(getData);return true;}}async function handleLoadMore(func) {state.status = 'loading';console.log('handleLoadMore');try {const res = await func();setList(res)setStatus(res)} catch (error) {console.error('Error during data loading:', error);}}function setList(res) {if (state.page === 1) {state.list = res.list;} else {state.list = state.list.concat(res.list);}state.total = res.total;}function setStatus(res) {if (state.list.length === state.total) {state.contentText.contentdown = '只可查看近一个月明细';state.status = 'noMore';} else {state.contentText.contentdown = '查看更多';state.status = 'more';state.isLoadMore = false;}}return {...toRefs(state),handleReachBottom,};
}

使用:

<template><view class="page"><view class="content"><SearchComponent @search="handleSearch" /><ListComponent :list="list" /><uni-load-more :status="status" :content-text="contentText" /></view></view>
</template><script>import {ref,reactive,onMounted} from 'vue';import SearchComponent from '../../components/SearchComponent';import ListComponent from './ListComponent';import usePagination from '../../../utils/usePagination.js';export default {components: {ListComponent,SearchComponent},setup() {const searchStr = ref('');const {list,status,contentText,handleReachBottom,} = usePagination(getData);async function getData() {console.log('getData success');try {// 先模拟请求const data = await new Promise(resolve => {setTimeout(() => {resolve({ list: [], total: 0 });}, 3000);});return data;} catch (error) {console.error('error:', error);throw error;}}function handleSearch(val) {searchStr.value = val;getData();}onMounted(() => {// 第一次加载数据getData();});return {searchStr,handleSearch,// 分页list,status,contentText,handleReachBottom,};},onReachBottom() {this.handleReachBottom();}}
</script><style scoped lang="scss">.page {min-height: 100vh;background: #fff;}
</style>

可以看到onReachBottom这个生命周期目前只能用vue2的选项式写法,把handleReachBottom在setup里return暴露出来,然后生命周期,methods等方法里就可以用this访问到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024,听世界用中文讲故事

汉语为桥&#xff0c;联结一段中国缘分&#xff1b;故事为骨&#xff0c;分享一段精彩人生&#xff1b;文化为翼&#xff0c;共筑一个和美地球村。近日&#xff0c;由教育部中外语言交流合作中心主办、中文联盟承办的第二届“汉语桥”全球外国人汉语大会故事会启动。与世界深情…

k8s调优--来自gpt

Kubernetes&#xff08;K8s&#xff09;性能调优是一个涉及多个方面的过程&#xff0c;旨在提高集群的效率和响应速度。这包括对节点、Pod、服务、网络和存储等多个层面进行调优。下面我将概述一些常见的Kubernetes性能调优方法&#xff1a; 节点级别的调优: 1.资源分配&…

网站可扩展架构设计

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、可扩展性架构简介 1.可扩展性是什么 可扩展性指系统为了应对将来需求变化而提供的一种扩展能力&#xff0c;当有新的需求出现时&#xff0c;系…

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;道阻且长&#xff0c;行则将至 前言 今天的博客是关于链表的题目&#xff0c;力扣上的题目之反转链表和删除链表中等于给定值 val 的所有节点 一.反转…

基于SpringBoot的“篮球竞赛预约平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“篮球竞赛预约平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 平台首页界面图 用户注册界面…

使用Qt生成图片

Qt之生成png/jpg/bmp格式图片_qt生成图片-CSDN博客 (1)使用QPainter 示例关键代码&#xff1a; QImage image(QSize(this->width(),this->height()),QImage::Format_ARGB32);image.fill("white");QPainter *painter new QPainter(&image);painter->…

QT程序打包

将exe文件单独拿出来放入一个单独的文件夹 保存qt安装路径下有如下这个文件 windeployqt.exe 在TCPFile.exe文件夹中使用以下cmd命令运行 即可打包 windeployqt 文件名.exe 成功打包&#xff01;

软件质量指标

软件质量指标 1、功能性质量指标 功能的正确性功能的准确性功能的完整性 2、可用性质量指标 可操作性通用性一致性 3、可靠性质量指标 系统自我恢复能力健壮性系统分布性 4、性能的质量指标 有效性安全管理/完整性易存取性 5、可维护性的质量指标 模块化增强能力/灵活…

功能强大的国外商业PHP在线教育系统LMS源码/直播课程系统

功能强大的国外商业PHP在线教育系统LMS/在线教育市场源码/直播课程系统 Proacademy是在线教育一体化的解决方案&#xff0c;用于创建类似于Udemy、Skillshare、Coursera这种在线教育市场。 这个平台提供在线课程&#xff0c;现场课程&#xff0c;测验等等&#xff0c;并有一个…

评价指标1. 均方误差(Mean Squared Error,MSE):

1. 均方误差&#xff08;Mean Squared Error&#xff0c;MSE&#xff09;&#xff1a; MSE是预测值与真实值之间差异的平方和的平均值&#xff0c;计算公式为&#xff1a; &#xfffd;&#xfffd;&#xfffd;1&#xfffd;∑&#xfffd;1&#xfffd;(&#xfffd;&#…

被迫走上前端之路第三课之vue的v-on事件监听

在vue的事件处理中&#xff0c;使用v-on来监听DOM事件&#xff0c;并在事件触发时执行对应的 JavaScript。 DOM事件&#xff1a;DOM&#xff08;document object model&#xff09;事件是指在HTML文档中发生的特定交互瞬间&#xff0c;如点击、鼠标移动、键盘按键等。 语法 &l…

第十篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Excel

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列博文目录 前言一、重要作用解说二、Python操作Excel的常用库介绍三、数据处理和分析示例代码四、自动化报表生成示例代码五、数据导入和导出示例代码六、数据可视化示例代码八、数据校验和清洗示例代码九、…

go面向对象

继承 封装 多态 定义结构体 //定义老师的结构体 type Teacher struct {Name stringAge intSchool string }func main() {var t1 Teacherfmt.Println(t1)t1.Name "tom"t1.Age 20t1.School "school"fmt.Println(t1) } 结构体实例的创建 package ma…

Day33:学习尚上优选项目

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;尚上优选项目 知识点&#xff1a; 一、项目概述 项目介绍业务流程功能架构技术架构核心技术项目模块其他资源 二、前后端分离开发概述 什么是前后端分离开发开发流程介绍 三、搭建后端环境 搭建项目结…

uniApp使用XR-Frame创建3D场景(4)金属度和粗糙度

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这一篇我们讲解xr-frame中关于mesh网格材质的金属度和粗糙度的设置。 1.先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{…

springboot使用com.github.binarywang 包实现微信网页上的支付和退款

前提 微信小程序中实现微信支付是从小程序中调去微信支付的界面直接进行支付&#xff0c;那么在pc端需要实现微信的支付呢&#xff0c;是需要出现一个二维码让用户使用扫码支付的。 注意&#xff1a; 需要实现pc端的微信支付&#xff0c;需要在微信商户平台开通native支付&…

springboot集成logback-spring.xml文件

彩色日志日志分debug和error文件输出,方便开发人员运维日志限制最大保管天数日志限制总量大小占用量GB日志限制单个文件大小MB日志显示最大保留天数屏蔽没用的日志<?xml version="1.0" encoding="UTF-8"?> <!--~ Copyright (c) 2020 mingyue4c…

如何使用VS统计自己的代码量?

历经漫漫编程之路&#xff0c;此刻我们不妨回首细数&#xff0c;那已累积的无数行代码&#xff0c;它们如同一串串无声的脚印&#xff0c;记载着我们默默耕耘的点滴时光。每一行代码都是平凡努力的印记&#xff0c;见证了我们的执着与付出&#xff0c;也塑造了今天的我们。让这…

uniApp使用XR-Frame创建3D场景(3)光源投影的运用。

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解光源在场景中的运用以及相关属性。 在子组件 xr-start的index.wxml文件中我们加入如下代码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr…

PG中的一例简单的update看表膨胀

PostgreSQL数据库的MVCC机制中,一个明显的特点是,在执行DELETE操作,它一般并不立即擦除要删的数据,通常只是做一个标记,留给VACUUM进程去做相应的清理,并且是有条件的清理。 而UPDATE操作,则更是一个DELETE操作和一个INSERT操作的组合。INSERT操作则通常会APPEND一条记…