uni-app nvue的list组件 偶现下拉刷新后再也无法触发上拉加载loadmore事件

uni-app nvue的list组件 偶现下拉刷新后再也无法触发上拉加载loadmore事件

示例代码:

loadmore事件逻辑:pageIndex++ 分页拉取数据 在原有的数据数组基础上concat此次拉取的数据
refresh事件逻辑:pageIndex重置为1 数据重置为空数组 拉取第一页数据
逻辑肯定没问题,之前用vue页面配合onreachBottom和onPullDownRefresh从来没有出现过这种问题。
而且大部分情况下能正常工作 ,即使用了下拉刷新后,再次拉到底部也是能正常重新触发loadmore的,但试验了几个改造过后的nvue页面,发现在android端,如果对list的下拉刷新操作的非常缓慢,很长时间才松手,很容易造成之后就不能触发loadmore了,且复现率相对较高(官方的新闻模板也是如此),但并不是百分百复现。

操作步骤:

在使用list的nvue页面 手动下拉刷新list组件

预期结果:

数据回到首页数据,上拉至list底部可以触发loadmore事件,加载更多数据

实际结果:

未触发loadmore事件

bug描述:

使用nvue的list组件,设置高度为屏幕高度-顶部固定元素高度。
为list添加refresh组件。为list添加了@loadmore事件 和@refresh事件

大部分情况下 refresh和loadmore都可以正常工作,
偶现缓慢下拉触发refresh后,就再也无法触发loadmore事件了。

目前ios尝试各种花式下拉刷新list后均未发现此问题。但在android模拟器和真机华为nova5plus上均发现了此问题。

且为 偶现 无法判断为何不触发loadmore事件

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 win10
HBuilderX 正式
HBuilderX版本 2.7.5
手机系统 Android
手机版本号 Android 10
手机厂商 华为
手机机型 nova5plus
页面类型 nvue
打包方式 云端
项目创建方式 HBuilderX

GIF PNG


更多关于uni-app nvue的list组件 偶现下拉刷新后再也无法触发上拉加载loadmore事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

请参考文档:重置 loadmore, https://uniapp.dcloud.net.cn/component/list

更多关于uni-app nvue的list组件 偶现下拉刷新后再也无法触发上拉加载loadmore事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


需要增加重置resetLoadmore 方法,使用流程官网写的不好,请看如下:
async loadMore() {
// 你的加载数据api 接口 自己做点什么

this.resetLoadmore(); //调用重置方法
},
// 重置 loadmore
resetLoadmore() {
this.$refs[“list”].resetLoadmore();
},

这个重置方法 我感觉 就是他目前内部的bug 可能目前无法解决 后续肯定会内部优化掉 只不过会等上个5、6年吧

报错方法不识别啊这,this.$refs[“list”].resetLoadmore is not a function

回复 1***@qq.com: <list ref="list"> </list> 没有加吧 ,你这技术太虚弱了

解决了这个困扰了好久的问题,原来是要重置啊,感谢感谢

请问解决了吗?我也遇到这个问题了

我也遇到这个问题了

已修复某些操作导致上拉无法加载数据的问题 github:https://github.com/dcloudio/uni-template-news

这个问题是nvue list组件在Android平台上的一个已知问题,主要与下拉刷新操作时的触发机制有关。当用户缓慢下拉刷新时,可能会导致list组件内部的状态未能正确重置,从而影响了后续loadmore事件的触发。

解决方案建议:

  1. 在refresh事件处理完成后,手动调用list组件的resetLoadmore方法:
this.$refs.list.resetLoadmore()
  1. 确保在refresh事件处理中正确重置了分页状态和数据:
handleRefresh() {
    this.pageIndex = 1
    this.dataList = []
    // 获取数据后
    this.$nextTick(() => {
        this.$refs.list.resetLoadmore()
    })
}
回到顶部