【问题标题】:Vue 3 refs is undefined in render functionVue 3 refs 在渲染函数中未定义
【发布时间】:2020-10-31 11:47:18
【问题描述】:

我有一个简单的 Vue 组件,其根元素为 ref="divRef"。但是,在 onMounted 函数中,divRef.value 返回未定义。任何帮助将不胜感激。

import { defineComponent, onMounted, ref, Ref, h } from "vue"

export default defineComponent({
    setup(props, context) {
        const divRef = ref() as Ref<HTMLElement>

        onMounted(() => {
            console.log(divRef.value) // undefined
        })

        return () => {
            return h(
                "div",
                {
                    ref: "divRef"
                },
                "This is a div"
            )
        }
    }
})

【问题讨论】:

  • 使用模板怎么样?

标签: javascript typescript vue.js vuejs3


【解决方案1】:

div 元素默认没有value 属性,如果您尝试访问"This is a div" div 中的文本),您应该像这样使用innerText 属性: divRef.innerText.

更新

根据docs,您必须将 ref 本身作为返回元素中的 ref 传递,才能在 Vue 3 中访问$el。所以您的代码应该是这样的:

return () => {
  return h(
    "div", {
      ref: divRef
    },
    "This is a div"
  )
}

【讨论】:

    【解决方案2】:

    在您的 render 函数中,传递 divRef 本身,而不是字符串:

    return h(
        "div",
        {
            //ref: "divRef"   // DON'T DO THIS
            ref: divRef
        },
        "This is a div"
    )
    

    【讨论】: