当前位置: 首页 > news >正文

vue3从精通到入门23:定义全局变量

在vue2中,我们知道vue2.x是使用Vue.prototype.$xxxx=xxx来定义全局变量, 比如定义一个全局的工具函数。

// 定义
...
Vue.prototype.$utils=utils;// 使用
this.$utils()
...

在vue3中我们无法使用this,提供了globalProperties;

globalProperties

我们在应用的入口文件(如 main.ts)中定义一个全局变量:

// main.ts  
import { createApp } from 'vue';  
import App from './App.vue';  // 定义全局变量  
const globalVariable = {  message: 'Hello from global variable!'  
};  // 创建并挂载应用  
const app = createApp(App);  
app.config.globalProperties.$globalVariable = globalVariable; // 将全局变量添加到全局属性上  
app.mount('#app');

getCurrentInstance 来访问这个全局变量:

<!-- MyComponent.vue -->  
<template>  <div>  <p>{{ globalMessage }}</p>  </div>  
</template>  <script setup lang="ts">  
import { ref, onMounted } from 'vue';  
import { getCurrentInstance } from 'vue';  const globalMessage = ref('');  onMounted(() => {  const { proxy } = getCurrentInstance() if (proxy ) {  // 通过全局属性访问全局变量  const globalVariable = proxy.globalProperties.$globalVariable;  if (globalVariable) {  globalMessage.value = globalVariable.message;  }  }  
});  
</script>

然而,这种做法有几个问题:

1. 它违反了 Vue 的组件化原则,因为组件应该通过 props、events 或 provide/inject 来与其他部分通信,而不是直接访问全局状态。

2. 它使得代码更难理解和维护,因为全局状态的管理变得不透明。

3. 如果全局状态发生变化,组件可能不会自动更新,除非使用额外的机制来监听这些变化。

建议

更好的做法是使用 Vuex 或其他状态管理库来管理全局状态,或者使用 Vue 3 的 provide/inject API 在组件树中传递状态。如果你只是想在多个组件之间共享一些简单的数据,也可以考虑使用 provide/inject 而不是定义全局变量。

总之,尽管技术上可以通过 getCurrentInstance 访问全局变量,但这并不是推荐的做法。相反,你应该使用 Vue 提供的更合适和更可维护的机制来管理状态。

http://www.lryc.cn/news/339062.html

相关文章:

  • 反爬虫之代理IP封禁-协采云IP池
  • ELK-Kibana 部署
  • Backtrader 量化回测实践(7)——在jupyter中执行bt的samples
  • npm vs. pnpm vs. Yarn: 三者之间的区别与比较
  • Learning Feature Sparse Principal Subspace 论文阅读
  • Hibernate入门经典与注解式开发大全
  • 蓝桥杯之注意事项
  • ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等
  • c++ - 类的默认成员函数
  • Java哈希查找(含面试大厂题和源码)
  • c++中常用库函数
  • Scrapy框架 进阶
  • ubuntu22安装snipaste
  • spring-cloud微服务openfeign
  • 小程序变更主体需要多久?
  • 19 Games101 - 笔记 - 相机与透镜
  • Flink入门学习 | 大数据技术
  • Arthas实战教程:定位Java应用CPU过高与线程死锁
  • HTML制作跳动的心形网页
  • 如何在Odoo 17 销售应用中使用产品目录添加产品
  • 为什么pdf拆分出几页之后大小几乎没有变化
  • 如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)
  • (六)PostgreSQL的组织结构(3)-默认角色和schema
  • DockerFile定制镜像
  • Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
  • 岛屿个数(dfs)
  • 【C++造神计划】运算符
  • Cortex-M3/M4处理器的bit-band(位带)技术
  • 【TOP】IEEE旗下1区,影响因子将破8,3个月录用,CCF推荐,性价比高!
  • 赚钱游戏 2.0.1 版 (资源免费)