Vue 官方推荐的状态管理库——取代 Vuex 的极简方案:直观 API、无 mutations、TypeScript 一等公民、模块化 Store
Vuex 曾是 Vue 生态的官方状态管理方案,但它的设计在 Vue 3 + TypeScript 时代显得笨重:强制 mutations(改 state 必须 commit,模板代码多)、命名空间模块嵌套复杂(this.$store.state.user.profile.name)、TypeScript 类型推断困难(要写大量泛型和辅助类型)、DevTools 集成有限。
Pinia 由 Vue 核心团队成员 Eduardo San Martin Morote 打造,现已成为 Vue 官方推荐的状态管理库。它去掉了 mutations(直接改 state 或用 actions),store 天然扁平模块化(每个 store 独立,用 import 组合),完美的 TypeScript 推断(无需任何辅助类型),支持组合式与选项式两种写法,体积仅约 1.5KB,DevTools 深度集成、时间旅行调试、SSR 与 Nuxt 开箱即用。
本教程 10 章从零讲到精通:认识 Pinia 与安装、定义 Store、State/Getters/Actions 三大概念、组件中使用、插件与持久化、TypeScript 深入、SSR/Nuxt 集成,以及完整实战与从 Vuex 迁移。
六大特性让 Pinia 成为 Vue 3 时代的默认状态管理方案
只有 state / getters / actions 三个概念,去掉 mutations,学习成本极低。
每个 store 独立定义,天然扁平,用 import 自由组合,无命名空间地狱。
state/getter/action 类型自动推断,无需任何辅助泛型,改一处全链路提示。
选项式(Options)贴近 Vuex 习惯,组合式(Setup)用 ref/computed 更灵活。
Vue DevTools 中查看 store 状态、时间旅行、追踪 action 调用与 state 变化。
服务端渲染状态注水、Nuxt 自动导入,避免跨请求状态污染。
10 章从第一个 Store 到生产级架构与 Vuex 迁移
Vue 状态管理演进、为何取代 Vuex、Pinia 优势(无 mutations / TS 友好 / 模块化)、安装 createPinia 与挂载。
defineStore、选项式 state/getters/actions、组合式(setup)写法、两种风格对比与选择。
state 定义、访问与修改、$patch 批量更新、$reset、$state 替换、storeToRefs 保持响应式解构。
getters 定义、访问其他 getters、带参 getter、返回函数、缓存机制与性能。
同步/异步 action、调用其他 action、组合 store、错误处理、访问 this。
useStore、storeToRefs 保持响应式、在 setup 外使用、组件卸载与生命周期。
Pinia 插件机制、pinia-plugin-persistedstate 本地持久化、$subscribe 订阅变化、$onAction。
state/getter/action 类型推断、类型化 store、泛型、类型安全最佳实践。
Nuxt 集成、SSR 状态注水 hydration、服务端状态、避免跨请求状态污染。
完整购物车/用户 store、store 组织结构、测试 store、DevTools 调试、从 Vuex 迁移、性能清单。