vue3中使用Pinia+SecureLS做加密持久化储存

// store/index.js

import { createPinia } from "pinia";

// 持久化和加密
import SecureLS from "secure-ls";

// 创建 SecureLS 实例
export const ls = new SecureLS({
  encodingType: "aes",
  isCompression: false,
});

const pinia = createPinia();

// 在 Pinia 中注册插件
pinia.use(({ store }) => {
  // 加密状态并存储到 SecureLS 中
  const encryptAndStoreState = () => {
    ls.set(store.$id, store.$state);
  };

  // 解密状态并恢复到 Pinia 中
  const decryptAndRestoreState = () => {
    const data = ls.get(store.$id);
    store.$state = data;
  };

  // 在每次状态变更时调用加密函数
  store.$subscribe(encryptAndStoreState);

  // 在初始化时调用解密函数
  decryptAndRestoreState();
});

export default pinia;
// store/modules/base.js
import { defineStore } from "pinia";
import i18n from "@/lang";
const { locale } = i18n.global;
export const useBaseStore = defineStore("base", {
  state: () => {
    return {
      language: "",
    };
  },
  actions: {
    setLanguage(val) {
      this.language = val;
    },
    initLang() {
      locale.value = this.language;
    },
  },
});
// main.js
import { createApp } from "vue";
import App from "./App.vue";
import pinia from "./store";
const app = createApp(App);
app.use(pinia).mount("#app");

在组件中使用

<script setup>

import { useBaseStore } from "@/store/modules/base";
const baseStore = useBaseStore();


// 语言切换
let lang = ref("ZH");
const language = computed(() => baseStore.language);
lang.value = language.value == "zh" ? "ZH" : "EN";

const changeLang = (key) => {
  lang.value = key == "zh" ? "ZH" : "EN";
  locale.value = key;
  baseStore.setLanguage(key);
};

<script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值