1. 简介
在 Vue 中,我们可以使用特殊的 ref attribute 直接访问底层 DOM 元素。
<template>
<input ref="input" />
</template>
<script setup>
import { ref, onMounted } from 'vue'
// 声明一个 ref 来存放该元素的引用
// 必须和模板里的 ref 同名
const input = ref(null)
onMounted(() => {
input.value.focus()
})
</script>
2. 在 v-bind 中使用
如果使用 v-bind
,ref 值为对应的 ref 变量,而不是字符串:
<template>
<input v-bind="props" />
</template>
<script setup>
import { ref, onMounted } from 'vue'
const input = ref(null)
const props = {
ref: input // 注意此处是变量,不是字符串 "input"
}
onMounted(() => {
input.value.focus()
})
</script>
3. 在 h() 中使用
如果使用 h()
,ref 值为对应的 ref 字符串,而不是变量:
<script>
import { h, ref, onMounted } from 'vue'
export default {
setup() {
const input = ref(null)
onMounted(() => {
input.value.focus()
})
return {
input
}
},
render() {
return h("input", { ref: "input" // 注意此处是字符串 "input",不是变量 });
}
}
</script>
4. 数组
<template>
<ul>
<li v-for="item in list" ref="itemRefs">
{{ item }}
</li>
</ul>
</template>
<script setup>
import { ref, onMounted } from 'vue'
const list = ref([
/* ... */
])
const itemRefs = ref([])
onMounted(() => console.log(itemRefs.value))
</script>
5. 函数
<input :ref="(el) => { /* 将 el 赋值给一个数据属性或 ref 变量 */ }">