Vue3怎么获取组件实例?setup父子孙/动态/混写组合式选项式超全解法
最近两年转Vue3开发的前端人不少,刚上手的时候很多人会遇到和获取组件实例相关的问题:比如组合式API里不能像选项式那样用this.$refs拿子组件了怎么办?想获取组件内部的方法或者属性但暴露不出来咋整?嵌套三层的孙子组件能不能直接拿到?切换频率很高的动态组件实例怎么稳定获取?组合式和选项式混写的项目里,跨API的实例调用规则有啥不一样?
别急,这些问题我刚学Vue3的时候也踩过坑,后来翻了不少文档、刷了社区案例才彻底搞明白,今天就把所有实用的Vue3组件实例获取方法整理成问答形式,一次性给你讲清楚,不管是新手入门还是老手查漏补缺,都能用得上。
Vue3里为什么不能随便用this.$refs了?
这个是刚转组合式API的人最常问的第一个问题,其实答案很简单:组合式API的setup函数在组件挂载之前就执行了,而this是选项式API的上下文对象,只有在组件实例创建完成后才会生成——setup里根本拿不到正确的this,自然也就没法用this.$refs这种依赖实例上下文的写法了。
那组合式API是不是完全不能用ref拿DOM或者子组件了?当然不是,Vue3只是换了个写法,而且功能反而更强大了。
code前端网