pinia的使用和持久化存储

一、pinia是什么:

        1、Pinia 是 Vue.js 的轻量级状态管理库,是vuex的升级版,常见于vue3中使用。

二、pinia基本使用:

        1、装包:npm i pinia

        2、在main.js中use

三、pinia持久化插件:   pinia-plugin-persistedstate

        1、装包:npm i pinia-plugin-persistedstate。

        2、在main.js中和pinia配合使用

import { createPinia } from "pinia";
// pinia开启持久化存储
import piniaPluginPersist from "pinia-plugin-persist";
// 统一注册组件
const app = createApp(App);
const store = createPinia();
store.use(piniaPluginPersist);
// 先使用再挂载
app.use(store).mount("#app");

四、使用:

  路径:store/userStore.js

import { defineStore } from "pinia";
import { ref, computed } from "vue";
import router from "@/router";
//computed相当于是计算属性
import { ElMessage } from "element-plus";
import "element-plus/theme-chalk/el-message.css";
import { loginApi } from "@/apis/user";
export const useUserStore = defineStore(
  "user",
  () => {
    let userInfo = ref({});
    const getUserInfo = async (data) => {
      let res = await loginApi(data);
      userInfo.value = res.data.result;
      // console.log(res.data.result);
      if (res.data.msg == "操作成功") {
        ElMessage({
          message: "登录成功",
          type: "success",
        });
        setTimeout(() => {
          router.push("/home");
        }, 400);
      }
    };
    return {
      userInfo,
      getUserInfo,
    };
  },
  {
    persist: {
      enabled: true,
      strategies: [{ storage: localStorage, paths: ["userInfo"] }],
    },
  }
);

上面是登录的时候调接口并持久化存储用户信息

持久化的代码是:   {
    persist: {

      //enabled:是是否开启持久化存储
      enabled: true,

      //strategies:是设置默认持久化存储的位置,默认在 sessionStorage 中存储,paths:为持久化存储的属性

      strategies: [{ storage: localStorage, paths: ["userInfo"] }],
    },
  }

五、在vue组件中使用:

        在js中引入

import { useUserStore } from "@/store/userStore";
let useUser = useUserStore();
console.log(useUser);

       在template中使用

<template>
  <nav class="app-topnav">
    <div class="container">
      <ul>
        <template v-if="useUser.userInfo?.token">
          <li>
            <a href="javascript:;"
              ><i class="iconfont icon-user"></i
              >{{ useUser.userInfo.nickname }}</a
            >
          </li>
          <li>
            <el-popconfirm
              title="确认退出吗?"
              confirm-button-text="确认"
              cancel-button-text="取消"
              @confirm="confirmEvent"
            >
              <template #reference>
                <a href="javascript:;">退出登录</a>
              </template>
            </el-popconfirm>
          </li>
          <li><a href="javascript:;">我的订单</a></li>
          <li><a href="javascript:;">会员中心</a></li>
        </template>
        <template v-else>
          <li><a href="/login">请先登录</a></li>
          <li><a href="javascript:;">帮助中心</a></li>
          <li><a href="javascript:;">关于我们</a></li>
        </template>
      </ul>
    </div>
  </nav>
</template>

这样就达到了pinia数据持久化的目的,再也不用担心刷新页面,数据就丢失的问题啦

Pinia是Vue.js 3.x官方推荐的状态管理库,主要用于组织和管理应用中的可复用状态。它本身不直接支持数据的持久化,包括本地存储(localStorage, sessionStorage)或 IndexedDB。但是,你可以结合Pinia使用一些第三方库或者Vue的内置API来实现数据的本地存储。 如果你想在Pinia中实现数据的持久化,你可以这样做: 1. 使用Vue的` localStorage.getItem` 和 `localStorage.setItem` API: 当组件卸载时,你可以将Pinia store的状态同步到本地存储,加载时再从存储中读取恢复状态。 ```javascript // store.js import { reactive } from 'vue' export const useStore = defineStore('myStore', { state() { return reactive({ myData: localStorage.getItem('myData') || {} }) }, mutations: { saveData(state) { localStorage.setItem('myData', state.myData) }, }, actions: { async loadOrSaveData() { const data = await someAsyncFunction() // 获取或计算数据 this.myData = data this.saveData() }, }, }) ``` 2. 第三方库:如Vuex-persistedstate,这是一个用于Vuex状态持久化的插件,可以方便地与Pinia集成。 ```javascript import createPersistedState from 'vuex-persistedstate' // ... storeEnhancers: [createPersistedState()] ``` 3. 如果你需要更复杂的数据存储(如键值对、对象或数组),可以考虑使用IndexedDB或适配其API的库,比如vue-localstorage-indexeddb。 重要的是,确保在处理数据存储时考虑到用户隐私和数据版本控制,特别是在生产环境中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值