组合式函数中按需引入全局Store,需调用useStore()获取响应式实例,配合storeToRefs解构以保持响应性,支持异步/条件逻辑及SSR,不可直接return store实例。

在组合式函数中按需引入全局 Store,核心是不提前实例化 store,而是在函数内部调用 useStore() 获取响应式实例。Pinia 的 store 是工厂函数,每次调用都返回独立的响应式引用,天然适配组合式函数的按需逻辑。
直接调用 useStore() 获取实例
组合式函数里无需 import 整个 store 模块再解构,只需导入对应的 useStore 函数,然后在函数体内调用它:
- 确保 store 已通过 app.use(createPinia()) 全局安装,否则 useStore() 会报错“Pinia instance not found”
- useStore() 返回的是响应式对象,可直接读写 state、调用 actions、访问 getters
- 该调用本身是响应式的,store 更新会自动触发依赖它的计算或副作用
配合 toRefs 避免响应式丢失
若需从 store 中解构多个 state 或 getter,必须用 storeToRefs(不是普通解构),否则会失去响应性:
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
- 错误写法:
const { count, name } = useCounterStore()→ 解构后变成普通变量,不再响应 - 正确写法:
const store = useCounterStore(); const { count, name } = storeToRefs(store) - storeToRefs 只对 ref、computed 等响应式类型做浅层代理,不破坏响应链
在异步或条件逻辑中安全使用
组合式函数常用于封装带副作用的逻辑(如登录、加载配置),此时可在任意时机调用 useStore:
立即学习“前端免费学习笔记(深入)”;
- 例如封装一个
useUserAuth()函数,在内部调用const userStore = useUserStore() - 即使函数被多次调用,每次获取的都是同一个 store 实例(Pinia 内部单例缓存)
- 服务端渲染(SSR)环境下,useStore() 在客户端和服务器端行为一致,无需额外判断
与组合式函数共用时的注意事项
当组合式函数本身也返回 ref/computed 时,可自然与 store 协同工作:
- 比如
useLocalStorage('user-preference', {})返回的 ref 可直接赋值给 store.state 的某个字段 - 在 setup store 中可直接调用组合式函数(如 useAsyncState),但在 option store 中仅支持返回 ref 的函数(如 useLocalStorage)
- 不可在组合式函数中直接 return store 实例 —— 应由调用方决定如何消费,保持职责分离

















