技术文档Pinia 状态管理

Pinia 状态管理

前端Vue状态管理
内容

Pinia 是什么?

Pinia 是 Vue 的官方状态管理库,就像 Vuex 的升级版,用来在组件之间共享数据(比如登录用户、token、购物车等)。

简单说: 你可以把它理解为"全局变量仓库",用来保存跨组件共享的变量,比如登录状态、token、用户信息等等。

| 存储方式 | 特点 | | ---------------- | --------------------- | | localStorage | 持久化存储,关掉页面不会消失 | | sessionStorage | 临时存储,刷新后还在,但关闭页面会清除 | | pinia(内存) | 页面一刷新就没了,适合临时状态配合持久存储 |


举个例子:token 的 Pinia 写法

// token.js
import { defineStore } from 'pinia'

export const useTokenStore = defineStore('token', {
  state: () => ({
    token: ''
  }),
  actions: {
    setToken(newToken) {
      this.token = newToken
    },
    removeToken() {
      this.token = ''
    }
  }
})

然后你可以在任何组件或文件中这样用它:

const tokenStore = useTokenStore()
tokenStore.setToken('abc123')
console.log(tokenStore.token) // 打印 abc123

Pinia 保存的"有效期"是多久?

默认情况下:

Pinia 存的数据是保存在内存里的 —— 页面一刷新就没了!

所以你这个项目里应该还有类似这种写法来"持久化" token:

// 初始化时,从 localStorage 读取
token: localStorage.getItem('token') || ''

想让 Pinia 的状态持久保存(刷新也不丢)?

你可以使用一个插件叫 pinia-plugin-persistedstate

npm install pinia-plugin-persistedstate

然后配置:

import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
app.use(pinia)

在你的 store 里加上:

export const useTokenStore = defineStore('token', {
  state: () => ({
    token: ''
  }),
  persist: true
})

这样它就会自动把数据保存到 localStorage,页面刷新也不会丢了


总结一下:

|问题|答案| |---|---| |Pinia 是干嘛的?|Vue 的状态管理工具(全局变量仓库)| |保存在哪里?|默认保存在内存(刷新就没)| |怎么持久保存?|用 localStorage / 或配合 pinia 插件| |和 Vuex 区别?|更简单、更轻量、更官方推荐(Vue3 专用)|