Pinia 是 Vue.js 团队成员专门为 Vue 开发的一个全新的状态管理库,也相当于vuex5,下面关于vuex5的提案是不是觉得很像
Vuex5 的提案
Vuex: State
、Getters
、Mutations
(同步)、Actions
(异步)
Pinia: State
、Getters
、Actions
(同步异步都支持)
vuex的最新版为4.x
pinia的最新版为2.x
pinia 没有 mutations,actions的使用不同(pinia支持同步异步),getters的使用是一致的
pinia 没有总出口全是模块化,需要定义模块名称,当多个模块需要协作的时候需要引入多个模块,vuex是有总出口的,在使用模块化的时候不需要引入多个模块
pinia 在修改状态的时候不需要通过其他api,vuex需要通过commit,dispatch去修改
使用 npm 或 yarn 安装 Pinia:
npm install pinia
# 或者
yarn add pinia
在你的项目中创建一个 Pinia store,可以通过创建一个 .ts
文件来实现。例如,你可以创建一个名为 store.ts
的文件:
import { defineStore } from 'pinia';
export const useMyStore = defineStore('myStore', {
state: () => ({
count: 0,
}),
getters: {
doubleCount: (state) => state.count * 2,
},
actions: {
increment() {
this.count++;
},
},
});
在这个示例中,我们创建了一个名为 myStore
的 Pinia store,其中包含一个状态变量 count
、一个 getter doubleCount
和一个 action increment
。
在你的应用程序的入口文件中(通常是 main.ts
),注册 Pinia:
import { createApp } from 'vue';
import App from './App.vue';
import { createPinia } from 'pinia';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
在你的 Vue 组件中引入 useMyStore
并使用它来访问状态、调用操作等:
Count: {{ count }}
Double Count: {{ doubleCount }}
需要安装 pinia-plugin-persist
插件和 Pinia:
npm install pinia pinia-plugin-persist
# 或者
yarn add pinia pinia-plugin-persist
创建一个 Pinia store,用于管理需要持久化的状态。
// store.js
import { defineStore } from 'pinia';
import { usePersist } from 'pinia-plugin-persist';
export const useMyStore = defineStore({
id: 'myStore',
state: () => ({
count: 0,
}),
actions: {
increment() {
this.count++;
},
},
});
// 使用插件进行状态持久化
usePersist(useMyStore, {
// 配置选项
// 默认存储在 localStorage
// 如果需要使用 sessionStorage,可以指定 storage: 'sessionStorage'
key: 'myStore', // 存储的键名
// 可以添加更多配置选项,例如过期时间
});
使用 pinia-plugin-persist
插件,你可以轻松实现状态的持久化,无需手动处理本地存储。你可以根据需要配置更多的选项,例如设置过期时间或自定义存储键。这有助于简化状态管理和数据的持久化工作。
Pinea是轻量级的,体积很小,它适合于中小型应用。它也适用于低复杂度的Vue.js项目,因为一些调试功能,如时间旅行和编辑仍然不被支持。
Vuex 用于中小型 Vue.js 项目是过度的,因为它重量级的,对性能降低有很大影响。因此,Vuex 适用于大规模、高复杂度的 Vue.js 项目