Vue 3 refs 在渲染函数中未定义

San*_*jay 5 javascript typescript vue.js vuejs3

我有一个简单的 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"
            )
        }
    }
})

Run Code Online (Sandbox Code Playgroud)

ton*_*y19 11

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

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


SMA*_*KSS 5

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"
  )
}
Run Code Online (Sandbox Code Playgroud)