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

Vue3中如何将模板ref作为props传递给子组件?

如何将父组件的模板Ref传递给子组件

直接通过props传递即可,关键是子组件要正确接收并处理ref的响应式更新,以下是完整实现步骤和代码示例:

1. 父组件传递模板Ref

父组件中定义好模板ref后,直接通过props绑定传递给子组件,遵循Vue的props命名规范(推荐使用短横线分隔):

<script setup>
import { ref } from 'vue'
import Child from './Child.vue'

const parentRef = ref()
</script>

<template>
  <div ref="parentRef">
    <!-- 直接将ref作为props传递 -->
    <Child :parent-ref="parentRef" />
  </div>
</template>

2. 子组件接收并使用Ref

子组件需要先声明接收parent-ref这个props,然后将其传入useScroll。由于模板ref在组件挂载后才会赋值,推荐传递一个返回目标元素的函数给useScroll,这样它能自动响应ref的变化:

<script setup>
import { useScroll } from '@vueuse/core'

// 声明接收props,指定类型为DOM元素
const props = defineProps({
  parentRef: {
    type: HTMLElement,
    required: true
  }
})

// 传递响应式的父组件ref给useScroll
const { x, y, isScrolling, arrivedState, directions } = useScroll(() => props.parentRef)
</script>

注意事项

如果父组件存在异步渲染场景,导致子组件挂载时父元素还未生成,可以通过watch监听props.parentRef的变化,确保元素存在时再初始化滚动监听:

import { watch } from 'vue'

watch(() => props.parentRef, (el) => {
  if (el) {
    // 这里可重新初始化useScroll或执行相关逻辑
  }
}, { immediate: true })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:26