JiYis
JiYis
  • 发布:2023-08-28 15:19
  • 更新:2023-08-28 17:02
  • 阅读:285

【报Bug】HBX3.8.12 版本 v-for中 image组件的加载出现了重复的情况

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 1

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iPhoneX

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

// 很简单的代码

<view v-for="(item, index) in imageArr" :key="index">  
     <image style="width: 100rpx; height: 100rpx;" :src="item"></image>  
</view>

// imageArr就是从数据库中取值,我自己测的时候,设置了一个定时器,往imageArr里面的第一个元素插入不同图片,也出现了问题(图片需要是没有加载过的,不然他加载后就有缓存,就不会有问题)
// 每隔5秒添加一个新的图片

setTimeout(function() {  
    this.imageArr.unshift("新的图片")  
}, 5000);

操作步骤:

如上

预期结果:

如上

实际结果:

如上

bug描述:

HBX3.8.12 版本 v-for中 image组件的加载出现了重复的情况

有点类似于iOS TableView的Cell复用加载的问题

直接看代码吧,我用HBX其他版本没有出现;(代码手敲的,可能会出错。。很简单的一个)

这里发现问题是因为我们做了一个IM列表,在收到最新会话的时候,会从数据库拉取数据,然后就发现顶上的头像和第二个一样,在第一个头像加载完成后,又恢复正常,猜测是出现了数据复用的问题(出现的错误看截图)

2023-08-28 15:19 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

key不要用index 换一个id试试

  • JiYis (作者)

    刚刚尝试了,一样的

    2023-08-28 16:12

DCloud_UNI_Anne

DCloud_UNI_Anne

  • JiYis (作者)

    这里出现问题,并不是整个项目出现了重复,因为这个列表还有昵称和最新的一条消息内容,这些都没问题,就头像有问题

    2023-08-28 17:04

  • JiYis (作者)

    所以我感觉不是item重复了,是image复用的问题

    2023-08-28 17:04

w***@gmail.com

w***@gmail.com

直接把item当key就是唯一的

  • JiYis (作者)

    这里出现问题,并不是整个项目出现了重复,因为这个列表还有昵称和最新的一条消息内容,这些都没问题,就头像有问题;所以我感觉不是item重复了,是image复用的问题

    2023-08-28 17:04

  • w***@gmail.com

    回复 JiYis: 我还专门写了个测试代码试了一下,如果是index作为key的话,图片好像有个替换的动作。而用item作为key的话,就是空白背景,然后加载。


    不行你可以试试push()有没有问题,毕竟unshift()是往前面加元素,index是被复用了。直接追加就没这个问题

    2023-08-28 17:11

  • JiYis (作者)

    回复 w***@gmail.com: 我这里尝试的,是直接用新的数组给替换,结果还是出现了这样的情况,我昨天用的是id作为key,我等下试试直接用item看看;不过很奇怪,3.8.12以前就没有发现这样的情况。。

    2023-08-29 08:54

  • w***@gmail.com

    回复 JiYis: 这渲染机制应该不会变吧,是不是之前图片响应快,看不到替换的这个过程。现在不也是图片加载完就正常了,只是加载完之前看到上面的图片是复制下面的吧

    2023-08-29 10:45

  • JiYis (作者)

    回复 w***@gmail.com: 对,在网络差的情况就很明显了。

    2023-08-29 11:49

要回复问题请先登录注册