者行孙
者行孙
  • 发布:2022-02-11 14:26
  • 更新:2022-02-11 21:35
  • 阅读:474

【报Bug】在微信小程序 v-for 和 slot 一起使用时表现异常

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows10 20H2

第三方开发者工具版本号: 1.05.2111300

基础库版本号: 2.22.0

项目创建方式: CLI

CLI版本号: 2.0.1-33520211229002

操作步骤:

同 bug 描述

预期结果:

使用 slot 和 不使用 slot 在 v-for 中渲染保持一致

实际结果:

使用 slot 时在 v-for 中无法正确渲染

bug描述:

需要实现一个弹幕的功能,
根据时间轴动态将弹幕push到barragesActive中、
等该弹幕卷动完毕(2秒)再从barragesActive中移除、
由于弹幕组件需要泛用并可以自定义内容,
弹幕组件故有如下结构:

复制代码<template>  
  <view class="barrages">  
    <view  
      v-for="barrage of barragesActive"  
      class="barrage"  
      :key="barrage.id"  
      :id="barrage.id"  
      :data-id="barrage.id"  
      :style="{  
        top: barrage.top,  
      }"  
    >  
      <image class="avatar" :src="barrage.avatar"></image>  
      <slot v-bind:barrage="barrage">  
        <view class="name">{{ barrage.name }}</view>  
        <view class="content">{{ barrage.content }}</view>  
      </slot>  
    </view>  
  </view>  
</template>

逻辑上 barragesActive 是根据时间轴动态增减的

当使用 slot 时,已有弹幕在滚动中一旦 barragesActive 数组 push 了新弹幕,则已有的弹幕的动画被重置,v-for 疑似被整块重新渲染。
当去除 slot 时,所有弹幕能正确播放滚动动画,并在动画播放完毕后正确移除。

经排查发现,使用 slot 时,v-for 渲染出来的元素:
:data-id 是正常动态变化的、
:id 变成了固定的几个且永远不再变化,:id:data-id 不一致、
:key 似乎未生效。

一但去除 slot:
:data-id 是正确动态变化的、
:id:data-id 正确保持一致、
:key 生效。

2022-02-11 14:26 负责人:无 分享
已邀请:
小枫叶

小枫叶 - 外包接单加v:wlmk1234567 注明来意

单独引这个插槽会怎么样

该问题目前已经被锁定, 无法添加新回复

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容