🎯Vue 3 少量全局数据共享的最佳实践(无需 Vuex/Pinia)

在 Vue 3 项目中,如果你只有很少的数据 需要全局共享,其实没必要引入 Vuex、Pinia 这类重量级状态管理库,完全可以用更简单的方式实现全局数据共享。下面我给你介绍几种常用且简洁的做法👇


1️⃣ 组合式 API + 单文件导出(推荐)

直接用 ref/reactive 在模块作用域创建全局响应式数据,然后导出即可。

示例:

js 复制代码
// src/globalState.js
import { ref, reactive } from 'vue'

// 全局响应式变量
export const globalCount = ref(0)
export const globalUser = reactive({ name: '张三', age: 18 })

在任意组件中直接引入使用:

js 复制代码
<script setup>
import { globalCount, globalUser } from '@/globalState'

function add() {
  globalCount.value++
  globalUser.age++
}
</script>

<template>
  <div>
    <p>全局计数:{{ globalCount }}</p>
    <p>全局用户:{{ globalUser.name }} - {{ globalUser.age }}</p>
    <button @click="add">增加</button>
  </div>
</template>

特点:

  • 🚀 简单、轻量、无依赖
  • 🔄 响应式,所有用到的组件都会自动更新

2️⃣ 自定义 Composable 封装

如果想要更灵活一点,可以封装成自定义 hooks(composable):

js 复制代码
// src/useGlobalData.js
import { ref } from 'vue'

const count = ref(0)

export function useGlobalData() {
  return { count }
}

组件中使用:

js 复制代码
<script setup>
import { useGlobalData } from '@/useGlobalData'
const { count } = useGlobalData()
</script>

3️⃣ 使用 provide/inject(适合父子/多级组件)

如果你的全局数据只需要在某个组件树下共享,可以用 Vue 的 provide/inject:

js 复制代码
// App.vue
<script setup>
import { ref, provide } from 'vue'
const count = ref(0)
provide('globalCount', count)
</script>
js 复制代码
// 子组件
<script setup>
import { inject } from 'vue'
const count = inject('globalCount')
</script>

这种方式适合"局部全局",即只在某个组件树下共享。


4️⃣ 什么时候用 Pinia/Vuex?

  • 只有数据量较多 ,业务复杂 ,需要模块化管理时,才建议引入专门的状态管理库。
  • 少量全局数据,完全没必要!

🏆 总结

  • 全局数据很少时,直接用 ref/reactive 导出变量最简单!
  • 需要更复杂管理时再考虑 Pinia/Vuex。

📚 延伸阅读

相关推荐
风骏时光牛马17 分钟前
AI多模块协同自动化工作流
前端
zhangminghuan25 分钟前
前端面试应对技巧
前端·面试·职场和发展
计算机魔术师1 小时前
潜伏14年的PHP致命洞,AI跑两天就交卷了
前端
IT_陈寒1 小时前
Vue的这个响应式陷阱我居然现在才发现
前端·人工智能·后端
Python自动化直播2 小时前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
开开心心就好2 小时前
发票信息录入太麻烦?离线工具一键转表格
运维·服务器·前端·pdf·ocr·maven·intellij-idea
এ慕ོ冬℘゜3 小时前
ES Promise.all/ Promise.race
前端·javascript·elasticsearch
喜欢打篮球的普通人4 小时前
LLVM 前端与优化层:Clang 如何把 C 代码变成 IR
c语言·前端·状态模式
大文说跨境4 小时前
亚马逊多店铺用过多款指纹浏览器,说点长期用的实际感受
前端·网络