vue3的getCurrentInstance获取当前组件实例

vue3的setup中没有this时需要使用getCurrentInstance()来获取。

在 Vue 3 中,getCurrentInstance 方法可以在组合式 API(Composition API)中获取当前组件实例。这个方法返回一个包含了组件实例的对象,你可以用它来访问组件的 props、attrs、slots 和 emit 方法等。

proxy:访问响应式数据和方法

ctx:访问属性和方法

注:ctx代替this只适用于开发阶段,如果将项目打包放到生产服务器上运行,就会出错,ctx无法获取路由和全局挂载对象的。此问题的解决方案就是使用proxy替代ctx

举例:

1、如果说我们要通过$refs来获取dom。

javascript 复制代码
<script setup>
  import { getCurrentInstance, onMounted } from "vue";

  const {proxy,ctx } = getCurrentInstance();

  onMounted(()=>{
    console.log(proxy.$refs.test_ref,ctx.$refs.test_ref)
  })
</script>

<template>
  <div>
    <div ref="test_ref">$refs获取</div>
  </div>
</template>

2、全局导入api接口方便使用

一个用于注册能够被应用内所有组件实例访问到的全局属性的对象
vue2的main.js

javascript 复制代码
import api from './api' // 导入api接口
Vue.prototype.$api = api

页面上使用时:

javascript 复制代码
this.$api

globalProperties是对 Vue 2 中 Vue.prototype 使用方式的一种替代,如果全局属性与组件自己的属性冲突,组件自己的属性将具有更高的优先级。
vue3的main.js

javascript 复制代码
import api from './api'
app.config.globalProperties.api = api

页面上使用时:

javascript 复制代码
import { getCurrentInstance, onMounted } from "vue";
const {proxy,ctx } = getCurrentInstance();
 onMounted(()=>{
   console.log(proxy.api)
 })
相关推荐
BigTopOne3 分钟前
VS Code IntelliSense 配置(解决 #include 找不到的报红)
前端
愚公搬代码5 分钟前
【愚公系列】《Web应用安全》005-Visual Studio Code编辑器的使用
前端·安全·编辑器
用户921080262868 分钟前
2. 以 Bubble 为例,看 Ant Design X Vue 组件是怎么设计的
前端
Liora_Yvonne10 分钟前
Monorepo 里的 shared、services 和 ui 到底怎么划分?
前端
PedroQue9913 分钟前
uni-router v2.1.0 升级:导航守卫全面支持返回值模式
前端·uni-app
猫七先生17 分钟前
从零到一:个人博客自动化部署踩坑全记录
前端
淼澄研学19 分钟前
Python调用通义千问API实现长尾搜题内容自动化生成实战
前端·react.js·架构
绿岛之北20 分钟前
Electron 安全入门:为什么一个 XSS 可能变成 RCE?
前端·electron
舒灿28 分钟前
DeepSeek Harness——Agent自我进化的实现途径?
前端·ai编程·deepseek
嘟嘟071730 分钟前
顺时针螺旋填充 n×n 矩阵:手撕 generateMatrix 的四个 for 循环
javascript·算法·面试