Pinia 是最近流行的状态管理库,可以替代 Vuex。
安装
项目中引入 Pinia
在项目入口文件中引入 Pinia。
main.ts1 2 3 4 5 6 7 8 9 10 11 12
| import { createApp } from "vue"; import { createPinia } from "pinia"; import App from "./App.vue";
const app = createApp(App);
const pinia = createPinia();
app.use(pinia); app.mount("#app");
|
创建 Store
下一步就是创建 Store。
一般是在 stores 目录下创建 Store。
stores/counter.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import { defineStore } from "pinia";
export const useCounterStore = defineStore("counter", { state: () => ({ count: 0, }), getters: { doubleCount: (state) => state.count * 2, }, actions: { increment() { this.count++; }, }, });
|
在组件中使用 Store
创建好了 Store 就可以在组件中使用 Store 了。
componentA.vue1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <template> <div> <p>Count: {{ counter.count }}</p> <p>Double Count: {{ counter.doubleCount }}</p> <button @click="counter.increment">Increment</button> </div> </template>
<script lang="ts" setup> import { ref, reactive } from "vue"; import { useCounterStore } from "../stores/counter";
const counter = useCounterStore(); </script>
|
持久化
可以使用 Pinia 插件将状态持久化到 localStorage。
- 安装插件
bash1
| npm install pinia-plugin-persistedstate
|
- 在入口文件中引入插件
main.ts1 2 3 4 5
| import { createPinia } from "pinia"; import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
const pinia = createPinia(); pinia.use(piniaPluginPersistedstate);
|
- 启用持久化
stores/counter.js1 2 3 4 5 6
| export const useCounterStore = defineStore("counter", { state: () => ({ count: 0, }), persist: true, });
|