0Pricing
Vue Academy · 课时

Pinia 与 Vuex:为何切换

无需 MUTATION、TypeScript 类型推断、DevTools 支持、更简单的 API,以及默认模块化

Pinia 与 Vuex:为何切换 是 CoddyKit 上的免费 Vue Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Vue Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Vue Academy 课程共包含 4 节课。

Pinia 为何取代 Vuex

Pinia 是 Vue 3 的官方状态管理库,官方推荐程度高于 Vuex。它保留了 Vuex 的优点,同时移除了样板代码以及与 TypeScript 配合不佳的部分。

不再需要 mutations

Vuex 要求只能通过 mutations 更改状态。Pinia 完全移除了它们——actions 可以直接修改状态。流程更简单、文件更少,同时保留开发者工具的跟踪功能。

// Vuex: state -> mutation -> action (3 steps)
// Pinia: action mutates state directly (1 step)
actions: {
  increment() {
    this.count++ // direct, no commit needed
  }
}

开箱即用的 TypeScript 类型推断

在 Vuex 中为状态仓库添加类型很麻烦,还需要复杂的包装器。Pinia 会根据您的 state、getters 和 actions 自动推断类型——不需要额外的类型层。

const store = useCounterStore()
store.count       // inferred as number
store.doubled     // inferred from getter
store.increment() // fully typed action

以模块化为设计理念

Vuex 使用包含嵌套 modules 的单一状态仓库,并带来了命名空间方面的诸多麻烦。Pinia 天生采用模块化设计:每个状态仓库一个文件,并分别使用自己的 defineStore 创建。不需要集中注册。

// stores/counter.js
export const useCounterStore = defineStore(...)

// stores/user.js
export const useUserStore = defineStore(...)

无需命名空间

由于每个状态仓库彼此独立,并在使用处导入,因此不需要管理全局命名空间。您只需导入所需的状态仓库,并将其作为函数调用。

import { useUserStore } from '@/stores/user'
const user = useUserStore()

开发者工具支持

Pinia 与 Vue 开发者工具的集成方式和 Vuex 一样。您可以获得操作时间线、状态检查和时间旅行调试功能——而不必编写 mutations。

更小的构建包

Pinia 大约比 Vuex 小 1KB,并且支持树摇。您从未导入的状态仓库不会包含在最终构建包中。

更扁平的 API

不再有 mapState、mapGetters 和 mapActions 这些样板代码。您只需在 setup 中调用组合式状态仓库,并直接使用返回的对象。

const counter = useCounterStore()
// access state, getters, and actions on one object

同时支持两种 API

Pinia 同时支持选项式 API 和组合式 API。编写状态仓库的两种方式是选项式状态仓库(对象)和设置式状态仓库(函数),本课程稍后会介绍它们。

安装 Pinia

创建 Pinia 实例并将其注册为插件,即可将 Pinia 添加到您的应用中。从此以后,任何组件都可以使用任意状态仓库。

import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'

createApp(App).use(createPinia()).mount('#app')

何时使用 Pinia

当状态必须在多个组件之间共享、在路由切换后继续存在,或需要在开发者工具中检查时,请使用 Pinia。对于只属于一个组件的状态,普通的 ref 仍然更简单。

快速检查

检验您对 Pinia 为何取代 Vuex 的理解。

回顾

Pinia 是 Vue 3 状态管理的现代选择:

  • 不需要 mutations——actions 可以直接修改状态。
  • 自动进行 TypeScript 类型推断,不需要包装器。
  • 采用模块化设计:每个文件一个状态仓库,不需要命名空间。
  • 完整的开发者工具支持,以及小约 1KB 的构建包。

常见问题解答

「Pinia 与 Vuex:为何切换」课时是免费的吗?

是的 — 「Pinia 与 Vuex:为何切换」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Vue Academy 课程的其余内容,请升级到 CoddyKit PRO。 Vue Academy 课程共包含 4 节课。

「Pinia 与 Vuex:为何切换」这节课中我会学到什么?

无需 MUTATION、TypeScript 类型推断、DevTools 支持、更简单的 API,以及默认模块化 你通过在浏览器中直接运行的动手代码来练习 Vue Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Vue Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Vue Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Pinia 与 Vuex:为何切换」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Vue Academy 课中编写并运行代码吗?

能。每节 Vue Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Pinia 与 Vuex:为何切换
  2. defineStore:状态、派生值与操作
  3. 组合多个存储并实现跨存储访问
  4. Pinia 持久化与 DevTools
← 返回 Vue Academy