当前位置: 首页 > news >正文

封装pinia并引入pinia持久化工具(pinia-plugin-persistedstate)

安装

 pnpm add pinia pinia-plugin-persistedstate 

配置

src下建立store文件夹并且创建index.ts文件 结构如下
在这里插入图片描述

store/index.ts

import type { App } from 'vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'const store = createPinia()
store.use(piniaPluginPersistedstate)export const setupStore = (app: App<Element>) => {app.use(store)
}export { store }

store/modules/app.ts

import { store } from '../index.ts'
import { defineStore } from 'pinia'interface AppState {num: numberisOpen: boolean
}export const useAppStore = defineStore('app', {state: (): AppState => {return {num: 1,isOpen: false}},getters: {getNum(): number {return this.num}},actions: {setNum(num: number) {this.num = num},setIsOpen(isOpen: boolean) {this.isOpen = isOpen}},persist: true
})export const useAppStoreWithOut = () => {return useAppStore(store)
}

main.ts

在main.ts中进行pinia的挂载
import { setupStore } from ‘./store/index.ts’
setupStore(app)

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 引入状态管理
import { setupStore } from './store/index.ts'
// 路由
import router, { setupRouter } from './router'
const setupAll = async () => {const app = createApp(App)setupRouter(app)setupStore(app)await router.isReady()app.mount('#app')
}setupAll()

使用

<template><div style="height: 100%"><div> HomeView </div><div>{{ appStore.num }}</div><button @click="handleDemo(1)">测试</button></div>
</template><script setup lang="ts">
import { useAppStoreWithOut } from '../store/modules/app.ts'
defineOptions({ name: 'HomeView' })
const appStore = useAppStoreWithOut()
const handleDemo = (value: number) => {appStore.setNum(appStore.num + value)console.log('appStore.num', appStore.num)
}
</script><style lang="scss" scoped></style>

持久化存储截图
在这里插入图片描述

关于持久化

官网

https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/config.html

基本配置

{persist: {key: 'user', // 存储的键名,默认为 store 的 idstorage: localStorage, // 存储位置,默认为 localStoragepaths: ['token', 'userInfo'], // 指定要持久化的状态,默认全部serializer: { // 序列化配置serialize: JSON.stringify,deserialize: JSON.parse}}
}

自定义存储键名

{persist: {key: 'my-app-user' // 自定义存储键名}
}

部分状态持久化

{persist: {paths: ['token'] // 只持久化 token}
}

使用 sessionStorage

{persist: {storage: sessionStorage // 使用 sessionStorage 替代 localStorage}
}

自定义序列化(如加密)

import { encrypt, decrypt } from '@/utils/crypto'{persist: {serializer: {serialize: (value) => encrypt(JSON.stringify(value)),deserialize: (value) => JSON.parse(decrypt(value))}}
}

多存储方式组合

{persist: [{key: 'user-info',paths: ['userInfo'],storage: localStorage},{key: 'user-token',paths: ['token'],storage: sessionStorage}]
}

部分内容来源 Pinia 及其持久化插件的完整使用指南

http://www.xdnf.cn/news/264709.html

相关文章:

  • HarmonyOS NEXT——DevEco Studio的使用(还没写完)
  • 如何基于HAL库进行STM32开发
  • 华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
  • Python 学习
  • 4.29-4.30 Maven+单元测试
  • 【LeetCode Hot100】二分查找篇
  • Swift:重构开发范式的现代编程语言
  • 《高性能MySQL》第1讲:MySQL架构
  • 音视频开发技术总结报告
  • 对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础
  • 3.0/Q1,Charls最新文章解读
  • batch normalization和layer normalization区别
  • 循环缓冲区
  • QNAP Duplicati 备份 123云盘
  • Java接口全面教程:从入门到精通
  • ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30
  • C与指针4——指针
  • 每天一道面试题@第五天
  • 第九课认识倍数
  • 【C++】模板进阶
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 20)
  • 多协议 Tracker 系统架构与传感融合实战 第四章 IMU 与 UWB 传感融合框架
  • 基于Springboot旅游网站系统【附源码】
  • 步进电机中断函数解释
  • rhce第二次作业
  • 工作记录 2015-06-01
  • fastapi+vue中的用户权限管理设计
  • Seata RM的事务提交与回滚源码解析
  • 六大机器学习算法全解析:企业级开发实战与深度理解
  • AWS云服务深度技术解析:架构设计与最佳实践