关于Vue3父组件获取子组件的数据疑问?

作者站长头像
站长
· 阅读数 8

父组件

<template>
    <son ref="sonRef" />
    <el-button @click='getSonData'>读取</el-button>
</template>
<script setup lang="ts">
    import { ref } from 'vue'
    const sonRef = ref(null)
    const getSonData = () => {
        console.log(sonRef.value.data)
    }
</scrip>

子组件

<template>
    <div> {{ data }}</div>
</template>
<script setup lang="ts">
    import { ref } from 'vue'
    const data = ref('abc')
    defineExpose({
        data
    })
</script>

为什么执行getSonData的时候,无法获取到子组件的data?sonRef.value.data只能在onMounted内使用吗?不能在父组件的方法里执行?

回复
1个回答
avatar
test
2024-07-03

这个正常情况下是不需要设置nextTick 或者 onMounted的,如果出现获取子组件属性undefined的情况,是因为子组件未渲染完成;

可尝试使用

const getSonData = () => {
// nextTick 是一个异步操作
  nextTick(() => {
    console.log(sonRef.value.data)
  })
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容