Vue通过v-for渲染的元素与$refs得到的实例对应不上

2023-05-16

        开发时遇到一个bug:通过v-for渲染出几个搜索条件组件(对应的数组数据记为selectList),通过其他方式修改了这些筛选条件对应的数据selectList,之后通过$refs得到的实例去触发对应子组件的方法(类似:this.$refs.test[index].changeValue(itemValue)),发现子组件的方法中的数据对应不上,会与其他筛选组件的数据错位。

        发现:

  1. 组件通过v-for渲染出来,使用了selectList中的其中的属性id作为key值,改变后的selectList中每组数据都有变化,但其中只有一组数据id与之前不同。
  2. 故id未变化的组件对应key不变,则这些组件并未完全重新渲染
  3. id变化的组件以及其后的组件changeValue方法中拿到的值是其他组数据的值,index是对应selectList的索引,故设想是否是$refs得到的index对应的组件实例并非是selectList的索引对应的值?打印一下,发现果然key值改变的组件对应$refs得到的实例数据中的最后一个,看来key值更新的实例会以push的方式加入$refs实例数组中。

 用简单数据测试下:

<template>
  <div class="box">
    <div @click="change">click</div>
    <div
      ref="testFor"
      v-for="(item, index) in dataArr"
      :key="'test' + item.key + '-' + index"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dataArr: [
        { name: "A", key: "1" },
        { name: "B", key: "2" },
        { name: "C", key: "3" },
        { name: "D", key: "4" },
      ],
    };
  },
  mounted() {
  },
  methods: {
    change() {
      this.dataArr = [
        { name: "A", key: "1" },
        { name: "BB", key: "22" },
        { name: "C", key: "3" },
        { name: "DD", key: "4" },
      ];
      console.log(this.$refs.testFor);
    },
  },
};
</script>

click后,查看页面打印,果然更新key值的vue实例在最后:

页面:

展开最后一个div:

             

查找资料,发现$refs中的实例确实是以push方式添加。

 总结:所以简单来说,就是vue通过v-for渲染的组件/元素,更新key值的组件/元素会push进当前的ref,所以会存在通过$refs[index]拿到的组件不对应原数组对应的index数据。

资料参考:[vue 源码系列] ref 与 $refs 如何关联_weixin_34289454的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue通过v-for渲染的元素与$refs得到的实例对应不上 的相关文章

  • LiveNVR中使用Onvif协议控制预置位

    LiveNVR支持预置位控制 xff0c 包括转到指定预置位 xff0c 设置指定预置位 xff0c 删除指定预置位 预置位在安防领域有较为普遍的应用 xff0c 可以进行很多既定位置的跳转 xff0c 很方便 之前我们说过如何用Onvif
  • .NET C#利用ZXing生成、识别二维码/条形码

    文章的原来的IP地址是 xff1a http www jb51 net article 99312 htm ZXing是一个开放源码的 xff0c 用Java实现的多种格式的1D 2D条码图像处理库 xff0c 它包含了联系到其他语言的端口
  • 监控实时直播的四分屏的前端展示

    完成运行效果图 xff1a 一 四分屏展示样式布局 1 通过html css等来进行样式排版 根据需求的四分屏的样式 xff1b 来合理的划分出四个大块 xff0c 分别用于放置四个播放器 xff1b 以四等分结构为例进行前端的排版 xff
  • 通过LiveGBS/LiveNVR实现安防监控视频统一接入汇聚管理(GB28181、Onvif/RTSP等)

    汇聚范围 1 支持GB28181的设备 平台 设备或是平台如果支持GB28181的平台接入 xff0c 就可以在自身的配置管理页面里 xff0c 配置平台接入 直接通过GB28181接入 xff0c LiveGBS国标流媒体服务平台 通过G
  • 智慧工地、雪亮工程、明厨亮灶等各类视项目通过GB28181汇聚视频监控到LiveGBS流媒体管理平台后,视频管理页面简介...

    目前市面上各类监控设备 摄像头 录像机 监控管理平台 等基本都支持GB28181协议 当设备通过GB28181统一汇聚到LiveGBS流媒体视频平台后 xff0c LiveGBS管理页面会管理所有接入进来的监控视频以及服务器硬件 网络状态的
  • LiveNVR Onvif/RTSP流媒体软件接入监控摄像头后如何获取直播流地址进行大屏展示、播放端拉流、网页播放监控视频等...

    1 LiveNVR介绍 LiveNVR的安防监控的视频直播 xff0c 可以按标准的Onvif RTSP协议接入监控设备 xff0c 也可以通过海康 大华 天地伟业等厂家私有SDK接入监控 xff0c 实现web页面的播放和录像回放 可以分
  • GB28181国标平台LiveGBS视频统一汇聚后如何获取固定的播放地址,实现监控视频Web页面无插件播放、拉流分析、上大屏等目的...

    目前汇聚各种厂家监控设备的视频汇聚平台 xff0c 基本都是通过GB28181标准协议实现的 下面介绍下LiveGBS Web无插件直播的GB28181视频平台将各厂家 包括海康 大华 华为 宇视 天地伟业等 监控汇聚到同一个服务器上后 x
  • 解决 LiveQing 流媒体服务器videojs flash播放RTMP、HLS提示错误的问题

    问题 LiveQing流媒体服务器可以输出HTTP FLV Websocket FLV RTMP HLS流 xff0c 在做RTMP HLS flash播放时候 xff0c 经常会遇到网站flash被禁用的情况 xff0c 每一次都会有用户
  • webpack 混淆压缩 javascript 后端代码

    需求背景 JavaScript 是脚本语言 没有编译过程 直接以源码就可以运行 有的时候 出于安全或者其他的原因 我们不希望别人直接读到源码 或者很容易对源码做出修改使用 这个时候 就需要对源码进行混淆压缩处理 经过处理后的代码体积变小 不
  • VideoJS 网页直播实现默认静音

    在开发 LiveQing高性能流媒体服务器 网页直播多分屏的时候 产品提出议建说 能不能在多分屏的时候 默认静音状态 因为多分屏界面 如果声音打开 好多个直播画面同时发出声音太过嘈杂 体验不好 我表示赞同 心想 这个应该不难处理吧 结果踩到
  • VideoJS 网页直播实现双击全屏

    最近接到客户需求 要求我们的网页直播播放器更加符合广大人民群众的使用习惯 实现双击全屏的效果 目前网页直播播放器使用了开源的 VideoJS 它的默认效果是单击播放区域暂停 只能通过右下角的最大化按钮触发最大化 要实现双击全屏播放的效果 就
  • LivePlayer H5直播/点播播放器安装与使用

    LivePlayer H5播放器 简介 H5直播 点播播放器 xff0c 使用简单 xff0c 功能强大 xff0c 免费使用 支持m3u8播放 支持HTTP FLV播放 支持RTMP播放 支持直播和点播播放 支持播放器快照截图 支持点播多
  • Echarts 修改折线的颜色和折线的点的大小方法

    在做SPC分析的时候或者一些专业的分析的时候有的客户会要求 点的大小 样式等 具体的设置方法如下 series type 39 line 39 showSymbol true symbol 39 circle 39 设定为实心点 symbo
  • 抽象工厂模式

    抽象工厂模式针对的是对产品族 xff0c 而不是产品等级结构 产品族 xff1a 同一厂商生产的产品 产品等级 xff1a 同一产品 xff0c 不同厂商的产品 比如水果类里面由苹果和香蕉 xff0c 水果就是产品族 xff0c 苹果香蕉就
  • 面向对象单例模式

    单例模式 xff1a 一个类只能创建一个对象 span class token keyword class span span class token class name A span span class token punctuati
  • 设计模式之代理模式

    概念 xff1a 为其他对象提供一种代理 xff0c 用来控制对象的访问 在某些情况下 xff0c 一个对象不适合或不能直接引用另一个对象 xff0c 而代理对象可以在客户端和目标对象之间起到中介作用 span class token co
  • ARM接口技术基础

    ARM介绍 嵌入式系统 xff1a 嵌入式系统 61 嵌入式硬件 43 嵌入式软件 硬件是软件的载体 xff0c 软件是硬件的灵魂 嵌入式软件 xff1a 1 裸机 xff1a APP 2 系统 xff1a OS 43 APP 嵌入式硬件
  • ARM指令之MOV指令汇编与机器码的对应关系

    指令条件码 条件码就是一种简单的测试ALU状态标志位的方法 mov指令机器码 比如 xff1a mov r1 3 立即数 xff1a 3 第一个操作数 xff1a 寄存器1 S xff1a 0 xff08 注意 xff1a mov指令后面加
  • 设计模式之外观模式

    什么是外观模式 外观模式就是将一个复杂的子类系统抽象到同一个接口进行管理 外界只需要通过此接口与子类系统进行交互 xff0c 不需要直接与复杂的子类系统进行交互 外观模式属于结构型模式 外观模式案例 1 实现KTV模式 xff1a 打开电视
  • 设计模式之适配器模式

    概念 将一个类的接口转换成客户希望的另外一个接口 使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 用vector容器中的for each 举例子 span class token keyword class span span c

随机推荐