Vue3 pinia持久化存储(组合式Api案例演示)

pinia-plugin-persist( pinia持久化插件)

本文采用的是 组合式Api的方式来做Pinia的持久化存储演示

如果对pinia的持久化还是不是很了解的👨‍🎓|👩‍🎓,可以看一下笔者的上一篇文章,或者去官网查看一下!!!!!!👇👇👇🔗

点击我,跳转至组合式Api声明仓库🌹🌹


持久化存储:

使用过Vuex的同学大概率都对Vuex 的数据持久化存储有一定的了解。

数据持久化存储:顾名思义是对数据进行永久存储,防止页面刷新导致数据发生丢失!!!


一、为什么要进行数据持久化存储

前面已经讲过了:主要是为了防止页面刷新,导致已经有的数据出现丢失的情况。

不使用仓库也可以对数据进行持久化存储。例如:可以使用sessionStroage或localStroage去进行数据的持久化存储。

pinia-plugin-persist插件的本质也是通过 浏览器的本地存储来实现的!

二、pinia-plugin-persist使用步骤如下

1.引入库

代码如下:

//在控制台执行如下代码:
 npm i pinia-plugin-persist 

安装结果如下图所示:

按照常理都能正常安装成功。如果没安装成功尽量去尝试切换npm源来解决问题。

在这里插入图片描述

2.在Pinia上注册pinia-plugin-persist插件

代码如下

import { createApp } from 'vue'

import {createPinia} from 'pinia'
//1.引入piniaPersist持久化插件
import piniaPersist from 'pinia-plugin-persist'
import App from './App.vue'

const pinia =createPinia()
//2.在Pinia中注册  piniaPersist
pinia.use(piniaPersist)

const app =createApp(App)
app.use(pinia)
app.mount('#app')

如下图所示(操作解释)

在这里插入图片描述

3.声明测试store(组合式Api)

组合式声明Store文章(不会组合式Api的同学点👇🔗)

Pinia仓库声明方式

代码如下:

import { defineStore } from "pinia";
import { ref, computed } from "vue";

export const sessionStore = defineStore(
  "sessionStore",
  () => {
    //1。定义仓库:状态
    const sessionCountTest = ref(0);

    //2。定义仓库:计算属性
    const testComputed = computed(
      () => `计算属性:$$$$$----${sessionCountTest.value}----$$$$$`
    );

    //3。定义仓库:修改状态的methods
    const addSessionCountTest = () => {
      sessionCountTest.value++;
    };
    const subSessionCountTest = () => {
      sessionCountTest.value--;
    };
    // 4.导出状态
    return {
      sessionCountTest,
      testComputed,
      addSessionCountTest,
      subSessionCountTest,
    };
  },
  {
    persist: {
      enabled: true, //Store中数据持久化生效
    },
  }
);

如下图所示(代码解释):

在这里插入图片描述

4.测试pinia数据持久化

代码如下

1.Vue3的Templa模版代码
<template>
  <div class="pinia-persist">
    <div class="pinia-persist-left">
      sessionStore定义的状态sessionCountTest:
      <div class="left">{{ sessionStoreInstance.sessionCountTest }}</div>
    </div>
    <div class="pinia-persist-center">
      sessionStore定义的计算属性sessionCountTest:
      <div class="center">{{ sessionStoreInstance.testComputed }}</div>
    </div>
    <div class="pinia-persist-right">
      sessionStore定义的Methods:
      <button
        @click="
          () => {
            sessionStoreInstance.addSessionCountTest();
          }
        ">
        sessionCountTest+1</button
      > <button
        @click="
          () => {
            sessionStoreInstance.subSessionCountTest();
          }
        ">
        sessionCountTest-1
      </button>
    </div>
  </div>
</template>

2.Vue3的script内代码

<script setup>
import { sessionStore } from "../../store/piniaPersistTest/index.js";
const sessionStoreInstance = sessionStore();
</script>

<style scoped>
.pinia-persist {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  width: 100%;
  height: 230px;
}
.pinia-persist .center {
  margin-bottom: 20px;
  display: inline-block;
  background-color: antiquewhite;
}
.pinia-persist .left {
  margin-bottom: 20px;
  display: inline-block;
  background-color: rgb(213, 237, 190);
}
.pinia-persist .right {
  margin-top: 20px;
  display: inline-block;
  background-color: rgb(215, 239, 250);
}
</style>

测试结果如下图所示:

1.正常渲染的结果如下图

在这里插入图片描述

2.修改后,并刷新页面的结果图

在这里插入图片描述

三、关于pinia-plugin-persist插件的功能拓展

设置存储的key值

 persist: {
      enabled: true, 
       strategies: [
      {
        key: 'user',//这个key就是在本地存储中的属性
        storage: localStorage,
      },
    ],
   },
    

修改存储形式

 persist: {
      enabled: true, 
       strategies: [
      {
        key: 'user',
        storage: localStorage, //可以选择对应的存储形式(localStorage或者sessionStroage)
      },
    ],
   },

选择性存储对应字段(自定义状态的存储方式)

 persist: {
      enabled: true, 
       strategies: [
      { storage: sessionStorage, paths: ['存储字段名1', '存储字段名2'] },
      { storage: localStorage, paths: ['存储字段名3'] },
    ], 
   },

总结

本文基本就结束了,基本没有什么特别大的难度,唯一比较不容易理解的地方可能在那个组合式Api声明仓库的部分

希望可以帮助到大家!!💪💪💪

Pinia中,可以通过使用 pinia-plugin-persistedstate 插件来实现数据持久化。首先,你需要安装 pinia-plugin-persistedstate 依赖包,可以使用 npm install pinia-plugin-persistedstate --save 命令进行安装。然后,在你的 main.js 文件中引入 createPiniapiniaPluginPersistedstate,并创建一个 pinia 实例并使用插件 pinia.use(piniaPluginPersistedstate)。示例如下: ```javascript import { createPinia } from &#39;pinia&#39;; import piniaPluginPersistedstate from &#39;pinia-plugin-persistedstate&#39;; const pinia = createPinia(); pinia.use(piniaPluginPersistedstate); app.use(pinia); ``` 接下来,你可以创建一个 user.js 文件,并在其中定义一个名为 useCounterStore 的 store。在这个 store 中,你可以定义 state、actions 和 persist 配置。persist 配置用于指定需要持久化的数据字段,以及持久化的方式和缓存的键名。示例如下: ```javascript import { defineStore } from &#39;pinia&#39;; export const useCounterStore = defineStore(&#39;user&#39;, { state: () => ({ counter: 0, name: "zero", msg: &#39;msg呀呀呀&#39; }), actions: { increment() { this.counter++ } }, persist: { key: &#39;storekey&#39;, // 缓存键名 storage: window.sessionStorage, // 缓存方式 paths: [&#39;counter&#39;], // 需要持久化的数据字段,这里只持久化 counter 字段 }, }); ``` 最后,在你的组件中使用 useCounterStore 来获取该 store 的实例,并调用其中的方法或修改其中的数据。示例如下: ```javascript import { useCounterStore } from &#39;../store/user&#39;; const counterStore = useCounterStore(); counterStore.increment(); // 调用 actions 中的方法 counterStore.$patch({ name: counterStore.counter, &#39;okk&#39; }); // 修改 counterStore 的数据 ``` 这样,你就可以实现 Pinia 组合式数据的持久化功能了。Store 是一个独立存在的,它保存状态和业务逻辑,不会绑定到组件树。它类似于一个全局状态的主人,包含 state、getters 和 actions 三个概念,相当于组件中的 data、computed 和 methods。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满脑子技术的前端工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值