Pinia - Vue 状态管理 #
为什么选择 Pinia? #
与 Vuex 对比 #
| 特性 | Pinia | Vuex |
|---|---|---|
| 学习曲线 | 低 | 中 |
| 代码量 | 少 | 多 |
| TypeScript | 原生支持 | 需额外配置 |
| 模块化 | 自动,无需嵌套 | 需要手动配置 modules |
| mutations | 无,直接修改 | 必须通过 mutations |
| DevTools | 完整支持 | 完整支持 |
| Vue 版本 | Vue 2 & 3 | Vue 2 & 3 |
核心优势 #
text
Pinia 核心优势
├── 简洁 API ──────── 只有 state、getters、actions
├── 完整类型推断 ──── TypeScript 开箱即用
├── 模块化设计 ────── 每个 store 独立,无需嵌套
├── 无 mutations ──── 直接修改状态或通过 actions
├── 支持 Vue 2/3 ──── 统一的 API
├── DevTools ──────── 完整的调试支持
└── 插件系统 ──────── 可扩展性强
学习路线 #
第一阶段:基础入门 #
适合零基础开发者,学习 Pinia 的核心概念和基本语法。
第二阶段:Store 定义 #
学习如何定义和使用 Store。
- 定义Store - 创建状态仓库
- State状态 - 状态的定义和修改
- Getters计算属性 - 派生状态处理
- Actions方法 - 定义业务逻辑
第三阶段:组合式API #
学习使用组合式 API 风格定义 Store。
- Setup Store - 组合式 API 风格
- 组合式函数 - 与组合式函数配合
- Store组合 - 多个 Store 协作
第四阶段:高级特性 #
掌握 Pinia 的高级功能。
第五阶段:最佳实践 #
学习企业级开发规范和技巧。
- 项目结构 - 代码组织规范
- TypeScript集成 - TypeScript 最佳实践
- 性能优化 - 性能优化技巧
- 常见问题 - 常见问题解答
第六阶段:Vuex 迁移 #
从 Vuex 迁移到 Pinia。
快速预览 #
一个简单的计数器 #
ts
// stores/counter.ts
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0
}),
getters: {
doubleCount: (state) => state.count * 2
},
actions: {
increment() {
this.count++
},
decrement() {
this.count--
}
}
})
vue
<template>
<div>
<p>Count: {{ counter.count }}</p>
<p>Double: {{ counter.doubleCount }}</p>
<button @click="counter.increment">+</button>
<button @click="counter.decrement">-</button>
</div>
</template>
<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
</script>
组合式 API 风格 #
ts
// stores/counter.ts
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
function decrement() {
count.value--
}
return { count, doubleCount, increment, decrement }
})
技术栈概览 #
text
Pinia 技术栈
├── Pinia 2.x 核心状态管理库
├── Vue 3.x 基础框架
├── Vue DevTools 调试工具
├── TypeScript 类型支持(推荐)
└── pinia-plugin-persistedstate 持久化插件(可选)
前置知识 #
学习本指南前,建议具备以下基础:
- HTML/CSS 基础
- JavaScript ES6+ 语法
- Vue 3 基础知识
- 组合式 API 基础(可选)
- 基本的命令行操作
学习建议 #
- 循序渐进:按照章节顺序学习,打好基础
- 动手实践:每学完一章,动手编写代码
- 对比学习:与 Vuex 对比理解,加深认识
- 项目驱动:通过实际项目巩固知识
版本说明 #
本指南基于 Pinia 2.x 编写,推荐使用最新稳定版本。
| 版本 | 状态 | 说明 |
|---|---|---|
| Pinia 2.x | 推荐 | 最新版本,支持 Vue 2 & 3 |
| Pinia 1.x | 维护 | 旧项目维护使用 |
开始你的 Pinia 学习之旅吧!
最后更新:2026-03-28