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

如何将Ref传递给Props?子组件接收Ref为undefined问题解决

父组件传递Ref给子组件Props时显示Undefined的问题解决

问题原因

Vue 中$refs的赋值时机是组件挂载完成后。父组件渲染流程里,子组件的mounted钩子会先于父组件的mounted执行,此时父组件内的<div ref="target">还未完成挂载,$refs.target处于undefined状态,导致子组件接收的target props为空。而热模块替换(HMR)时,父组件已经完成过挂载,$refs已存在,所以传递给子组件的是有效的DOM引用。

解决方案

方案1:子组件用nextTick延迟获取

在子组件的mounted钩子中,通过nextTick等待父组件DOM更新完成后再访问target:

// cmp.vue
mounted() {
  this.$nextTick(() => {
    console.log("target:", this.target); // 正常获取DOM元素
  })
}

方案2:父组件动态传递Ref

父组件监听$refs.target的变化,待其存在时再传递给子组件:

<!-- parent.vue -->
<template>
  <div ref="target">target</div>
  <cmp :target="currentTarget" />
</template>

<script>
export default {
  data() {
    return {
      currentTarget: null
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.currentTarget = this.$refs.target
    })
  }
}
</script>

方案3:Vue 3中绑定到响应式变量

如果使用Vue 3,可直接将DOM元素绑定到响应式变量,自动追踪变化并传递:

<!-- parent.vue -->
<template>
  <div :ref="el => target = el">target</div>
  <cmp :target="target" />
</template>

<script setup>
import { ref } from 'vue'
const target = ref(null)
</script>

内容的提问来源于stack exchange,提问作者Egor Antropov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:05:01