🎯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。

📚 延伸阅读

相关推荐
A923A5 分钟前
Vue 和 React 常用脚手架工具总结
前端·vue.js·react.js·脚手架
skywalk81635 分钟前
CherryStudioWeb:一个优雅的 AI 聚合导航页,让你在一个页面访问所有主流 AI 服务。
前端·css·人工智能·html
Highcharts.js7 分钟前
步骤总结|使用 React + Highcharts 实现动态更新图表
前端·javascript·react.js·前端框架·highcharts·图表渲染
~ rainbow~8 分钟前
前端转型全栈(五)——NestJS 文件上传功能开发复盘
前端·全栈
木斯佳8 分钟前
前端八股文面经大全:来未来前端实习一面(2026-04-17)·面经深度解析
前端·校招·实习
刘佬GEO27 分钟前
GEO 效果看什么指标:从提及、引用到推荐的判断框架
前端·网络·人工智能·搜索引擎·ai
jzwugang27 分钟前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
Liu.77429 分钟前
Vue 3开发中遇到的报错(1)
前端·javascript·vue.js
还有你Y7 小时前
Shell 脚本语法
前端·语法·sh