Pinia 与 Composition API 结合实现状态管理逻辑自然收敛:state 响应式定义、getters 等价 computed、actions 为普通函数且支持异步,类型推导开箱即用,store 可独立测试,按需加载并支持职责分离。

Pinia 和 Composition API 的结合,不是简单叠加,而是 Vue 3 生态中状态管理逻辑的自然收敛——它让状态、行为和派生值回归同一语义单元,不再割裂。
API 极简,取消 mutation 分层
Pinia 直接在 actions 中修改 state,同步赋值或 await 异步操作都可混写,无需像 Vuex 那样区分 mutations(同步)和 actions(异步)。这种统一降低了心智负担,也更贴近实际开发直觉。
- state 定义即响应式:用 reactive 或 ref 声明,天然具备 Vue 3 的响应追踪能力
- getters 等价于 computed:自动缓存、依赖追踪,写法与组件内 computed 一致
- actions 是普通函数:可调用其他 action、触发副作用(如 watch、onMounted)、甚至组合式函数
类型推导开箱即用
Pinia 基于 TypeScript 设计,defineStore 返回的 store 类型能被完整推导。state 结构、getters 返回值、actions 参数全部自动识别,无需手写接口或辅助泛型。
Vue 3 组合式 API 与 最佳实践,涵盖代码组织、useXxx 模式、组合式函数设计、Store 集成、响应式优化及功能抽取。
- VS Code 中鼠标悬停即可看到精确类型信息
- 解构时用 storeToRefs 保留响应性,同时不破坏类型完整性
- store 实例本身支持智能提示,比如 counterStore.count、counterStore.increment() 都有准确补全
逻辑聚合,真正实现关注点内聚
一个 defineStore 函数体,就能把某个业务域的状态、计算逻辑、数据获取、监听响应全部组织在一起。这与 Composition API 的“逻辑块”理念完全对齐。
立即学习“前端免费学习笔记(深入)”;
- 例如用户模块:token 状态、登录/登出 action、isLogin getter、以及 onMounted 后自动刷新用户信息,都写在 useAuthStore 里
- 避免 Options API + Vuex 中 state 在一处、mutations 在另一处、actions 又在别处的分散问题
- 便于单测——整个 store 可独立实例化、调用、断言,不依赖组件上下文
按需加载与职责分离更清晰
Pinia 不强制全局注册,每个 store 都是显式导入、按需使用。配合组合式函数(composable),还能进一步划分边界:store 管状态,composable 管流程。
- store 只暴露 state、getters、actions,不直接封装 API 请求逻辑
- 单独的 useUserApi.ts 封装请求、错误处理、loading 状态,内部调用 useAuthStore()
- 组件中 import { useAuthStore } from '@/stores/auth' 和 import { useUserApi } from '@/composables/useUserApi',职责一目了然

















