You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3+TypeScript如何给template refs传参并解决el为null问题

Vue3 + TypeScript 模板ref传递自定义参数的正确实现

错误原因

原写法在:ref中直接执行refHandler($el, i)属于立即调用函数,并非将函数作为回调传给ref绑定。Vue的ref回调机制会自动将对应DOM元素作为唯一参数传入绑定的函数,主动调用的写法会破坏默认传参逻辑,因此拿到的el为null。

正确实现

模板代码

<input v-for="i in 5" :key="i" :ref="(el) => refHandler(el, i)" />

通过箭头函数返回闭包,提前捕获自定义参数i,Vue会自动将DOM实例传入回调的第一个参数el。

逻辑层代码

import { ref } from 'vue'

// 初始化存储ref的响应式数组,可根据业务调整长度或者动态扩容
const inputs = ref<(HTMLInputElement | null)[]>(new Array(5).fill(null))

const refHandler = (el: HTMLInputElement | null, index: number) => {
  // 元素卸载时Vue会传入null,非空判断避免赋值无效值
  if (el) {
    // v-for循环的i从1开始,数组下标从0开始,因此减1做对齐,不需要对齐可直接用index
    inputs.value[index - 1] = el
  }
}

注意事项

  • 如果需要动态处理不定长度的v-for列表,可以不用提前初始化数组固定长度,直接按下标赋值即可,JS数组会自动扩容
  • 如果需要保留元素卸载后的占位,可去掉非空判断,直接赋值inputs.value[index - 1] = el,方便后续判断元素是否存在

内容的提问来源于stack exchange,提问作者Rene Rowell de la Rama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:57:03