'Vue 3 refs is undefined in render function
I have a simple Vue component with root element as ref="divRef"
. However, in onMounted
function, divRef.value
returns undefined. Any help will be appreciated.
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"
)
}
}
})
Solution 1:[1]
In your render
function, pass the divRef
itself, not a string:
return h(
"div",
{
//ref: "divRef" // DON'T DO THIS
ref: divRef
},
"This is a div"
)
Solution 2:[2]
div
elements do not have value
attribute by default if you are trying to access "This is a div"
(text within the div
) you should use innerText
property like this: divRef.innerText
.
Update
According to docs, you have to pass the ref itself as the ref in your return element to get access to $el
in Vue 3. So your code should be something like this:
return () => {
return h(
"div", {
ref: divRef
},
"This is a div"
)
}
Solution 3:[3]
if you are use jsx in render function. you also need pass the divRef
itself, can't by string.
set() {
const divRef = ref() as Ref<HTMLElement>
return () => <div ref={divRef}></div>
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | tony19 |
Solution 2 | |
Solution 3 | ??? |