Tips:一些记录,一些笔记

2024/03/19
TUESDAY
Success grows out of struggles to overcome difficulties.
成功来源于克服困难的斗争。

01
pinia-plugin-persistedstate
「pinia-plugin-persistedstate」是一个适用于Pinia的持久化存储插件。
它的官方网站是:
https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

可以参考它的官方文档进行安装与进阶使用:
https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/

02
安装
如下所示:
(base) adamhuan@Leviathan vue-visible-abyss % pwd/Users/adamhuan/project_visible_abyss/vue-visible-abyss(base) adamhuan@Leviathan vue-visible-abyss %(base) adamhuan@Leviathan vue-visible-abyss % pnpm listLegend: production dependency, optional only, dev onlyvue-visible-abyss@0.0.0 Users/adamhuan/project_visible_abyss/vue-visible-abyss (PRIVATE)dependencies:@element-plus/icons-vue 2.3.1element-plus 2.6.1less 4.2.0pinia 2.1.7sass 1.72.0vue 3.4.21devDependencies:@vitejs/plugin-vue 5.0.4 unplugin-auto-import 0.17.5@vue-macros/reactivity-transform 0.4.3 unplugin-icons 0.18.5eslint 8.57.0 unplugin-vue-components 0.26.0eslint-config-prettier 9.1.0 vite 5.1.6eslint-plugin-prettier 5.1.3 vite-plugin-element-plus 0.0.12eslint-plugin-vue 9.23.0 vite-plugin-eslint 1.8.1prettier 3.2.5(base) adamhuan@Leviathan vue-visible-abyss %(base) adamhuan@Leviathan vue-visible-abyss % pnpm install pinia-plugin-persistedstateWARN deprecated vite-plugin-element-plus@0.0.12: This plugin is deprecated please use https://github.com/element-plus/unplugin-element-plus insteadPackages: +1+Progress: resolved 307, reused 272, downloaded 1, added 1, donedependencies:+ pinia-plugin-persistedstate 3.2.1Done in 1.3s(base) adamhuan@Leviathan vue-visible-abyss %(base) adamhuan@Leviathan vue-visible-abyss % pnpm listLegend: production dependency, optional only, dev onlyvue-visible-abyss@0.0.0 Users/adamhuan/project_visible_abyss/vue-visible-abyss (PRIVATE)dependencies:@element-plus/icons-vue 2.3.1element-plus 2.6.1less 4.2.0pinia 2.1.7pinia-plugin-persistedstate 3.2.1sass 1.72.0vue 3.4.21devDependencies:@vitejs/plugin-vue 5.0.4 unplugin-auto-import 0.17.5@vue-macros/reactivity-transform 0.4.3 unplugin-icons 0.18.5eslint 8.57.0 unplugin-vue-components 0.26.0eslint-config-prettier 9.1.0 vite 5.1.6eslint-plugin-prettier 5.1.3 vite-plugin-element-plus 0.0.12eslint-plugin-vue 9.23.0 vite-plugin-eslint 1.8.1prettier 3.2.5(base) adamhuan@Leviathan vue-visible-abyss %
可以通过「pnpm list」看到「pinia-plugin-persistedstate」已经安装成功了。
03
将插件添加到Pinia实例
如图所示:

文件「src/main.js」
// 引入函数「createApp」import { createApp } from "vue";// 引入样式import "@/styles/index.scss";// 引入 Element Plusimport ElementPlus from "element-plus";import "element-plus/dist/index.css";// 引入所有图标import * as ElementPlusIconsVue from "@element-plus/icons-vue";// 引入组件import App from "./App.vue";// 路由import router from "./router";// Piniaimport { createPinia } from "pinia";// Pinia 持久化import piniaPluginPersistedstate from "pinia-plugin-persistedstate";// Pinia: Storeimport store from "@/store/index.js";// 创建 Pinia 实例const pinia = createPinia();// 添加 Pinia 持久化插件pinia.use(piniaPluginPersistedstate);// 创建 Vue 实例const app = createApp(App);// 使用 Piniaapp.use(pinia);// 注册全局 Storeapp.config.globalProperties.$store = store;// 使用路由app.use(router);// 使用 Element Plusapp.use(ElementPlus, {// size: "small",// zIndex: 3000,});// 注册所有图标for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component);}// 混入「Mixins」import mixin from "@/mixins/index.js";app.mixin(mixin);// 过滤器(Filters)import { filters } from "@/filters/index.js";app.config.globalProperties.$filters = filters;// 挂载Vue实例app.mount("#app");
04
用法
一、如何使用「持久化存储插件」?
创建 Store 时,将 persist
选项设置为 true
。
具体说来,有两种方法:
选项式语法
组合式语法
选项式语法:
import { defineStore } from 'pinia'export const useStore = defineStore('main', {state: () => {return {someState: '你好 pinia',}},persist: true,})
组合式语法:
import { defineStore } from 'pinia'export const useStore = defineStore('main',() => {const someState = ref('你好 pinia')return { someState }},{persist: true,},)
二、清空与归零:
// 清空当前 Store 在 Pinia 中持久化的数据this.$reset// 最终真正清空 Storage 数据window.localStorage.clear();window.sessionStorage.clear();
在组合式API中直接使用「$reset()」会报错;
解决方法:
改用「选项式API」
重写「$reset()」
文件「src/main.js」
pinia.use(({ store }) => {const initialState = JSON.parse(JSON.stringify(store.$state));store.$reset = () => {store.$patch(initialState);};});
05
进阶用法
安装完插件后,可以使用「createPersistedState」来初始化插件;
这样,这些配置将会成为你的项目中所有的Store的默认选项;
这种方式,有时候也被称为「工厂函数」
这一部分的更多配置可以参考官方文档:
https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/advanced.html
具体如下:
文件「src/main.js」
// 引入函数「createApp」import { createApp } from "vue";// 引入样式import "@/styles/index.scss";// 引入 Element Plusimport ElementPlus from "element-plus";import "element-plus/dist/index.css";// 引入所有图标import * as ElementPlusIconsVue from "@element-plus/icons-vue";// 引入组件import App from "./App.vue";// 路由import router from "./router";// Piniaimport { createPinia } from "pinia";// Pinia 持久化// - 普通用法// import piniaPluginPersistedstate from "pinia-plugin-persistedstate";// - 进阶用法import { createPersistedState } from "pinia-plugin-persistedstate";// Pinia: Storeimport store from "@/store/index.js";// 创建 Pinia 实例const pinia = createPinia();// 添加 Pinia 持久化插件// - 普通用法// pinia.use(piniaPluginPersistedstate);// - 进阶用法pinia.use(createPersistedState({// 启用所有Store默认持久化auto: true,// 将数据持久化到哪里// storage: sessionStorage,}),);// 创建 Vue 实例const app = createApp(App);// 使用 Piniaapp.use(pinia);// 注册全局 Storeapp.config.globalProperties.$store = store;// 使用路由app.use(router);// 使用 Element Plusapp.use(ElementPlus, {// size: "small",// zIndex: 3000,});// 注册所有图标for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component);}// 混入「Mixins」import mixin from "@/mixins/index.js";app.mixin(mixin);// 过滤器(Filters)import { filters } from "@/filters/index.js";app.config.globalProperties.$filters = filters;// 挂载Vue实例app.mount("#app");
06
在页面查看效果

END
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。




