在vue3 的setup()
中如何拿到子组件或字节点?如何实现类似$refs
的功能?
举个栗子🌰, 想实现渲染完成后input
输入框自动获焦点的效果
模版:
1 2 3 4 5
| <template> <div class="container"> <el-input v-model="inputValue" ref="inputRef" @input="inputChange" placeholder="请输入内容"></el-input> </div> </template>
|
效果图:
方式1.ref()
通过ref()
函数可以实现类似$refs
功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import { ref, defineComponent, onMounted } from "vue"; export default defineComponent({ setup () { const inputRef = ref(); onMounted(() => { inputRef.value.focus(); }); const inputChange = v => { console.log(v); } return { inputValue: ref(""), inputRef, inputChange } } })
|
方式2.getCurrentInstance()
getCurrentInstance 允许访问对高级用法或库创建者有用的内部组件实例。 –官方文档介绍
所以可以使用该方法实现 this
的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import { ref, defineComponent, onMounted, getCurrentInstance } from "vue"; export default defineComponent({ name: "Home", setup () { const internalInstance = getCurrentInstance(); onMounted(() => { internalInstance.ctx.$refs.inputRef.focus(); }); const inputChange = v => { console.log(v); } return { inputValue: ref(""), inputChange } } })
|
tip: 官方文档中明确说明getCurrentInstance
使用限制链接