Vue 3 动态 ref 的使用方式(表格)

一、问题描述

先给大家简单介绍一下问题背景。我正在开发的项目中,有一个表格组件,其中一列是分镜描述,需要支持视频上传功能。用户可以为每一行的分镜描述上传对应的视频示例。然而,在实现过程中,出现了一个严重的问题:当表格有多行数据时,点击某一行的本地上传按钮,选择文件后,数据却总是跑到最后一行。这显然不符合预期,严重影响了用户体验和功能的正确性。

二、解决

1、创建了一个inputRefs对象来存储input元素的引用:

javascript 复制代码
const shotVideInputRefs = ref<Record<string, HTMLInputElement>>({});

2、在模板中,通过以下方式绑定ref

html 复制代码
 <input :key="row.id" :ref="(el) => (shotVideInputRefs[row.id] = el as HTMLInputElement)" type="file" @change="handleShotFileChange(row, $event)" />

3、触发文件上传对话框的方法:根据当前行的id来获取对应的input引用并触发点击事件:

javascript 复制代码
const triggerShotVideoInput = (rowId) => {
  if (shotVideInputRefs.value[rowId]) {
    shotVideInputRefs.value[rowId].click();
  }

};
相关推荐
阳光是sunny1 分钟前
走进AI(1):细说RAG、MCP、Agent、Function Call
前端·ai编程
剪刀石头布啊10 分钟前
var、let、const与闭包、垃圾回收
前端·javascript
剪刀石头布啊11 分钟前
js常见的单例
前端·javascript
剪刀石头布啊12 分钟前
数据口径
前端·后端·程序员
剪刀石头布啊16 分钟前
http状态码大全
前端·后端·程序员
剪刀石头布啊18 分钟前
iframe通信、跨标签通信的常见方案
前端·javascript·html
宇之广曜27 分钟前
搭建 Mock 服务,实现前端自调
前端·mock
yuko093129 分钟前
【手机验证码】+86垂直居中的有趣问题
前端
用户15129054522032 分钟前
Springboot中前端向后端传递数据的几种方式
前端
阿星做前端33 分钟前
如何构建一个自己的 Node.js 模块解析器:node:module 钩子详解
前端·javascript·node.js