pinia-plugin-persistedstate本地运行正常,打包上线无效

问题:Pinia 持久化插件pinia-plugin-persistedstate,我在本地运行,一切正常,但是打包发测试,测试说某个功能无效,我一看,缓存里面没有数据

这就奇怪了啊,我本地一切正常啊,缓存也是好好地,为啥打包上线就无效了,线上也没报错啥的啊。我先从打包那边vite.congig.js看,也没啥问题,再网上搜索这插件本地正常,打包失效的问题,也没找到。折磨了我三天。

我想测试这个插件是不是真的打包上线失效了,就新建了个test.js文件测试

上线运行,结果是有效的,说明插件效果是有的,但为啥我另一个无效

我这边存的是route的数据,难道和这个有关

通过对插件的搜索了解:pinia-plugin-persistedstate 使用 JSON.stringify 和 JSON.parse 进行状态的序列化和反序列化,若状态数据里存在嵌套循环引用,会导致这两个方法出错

再对route查询了解:Route 对象包含循环引用属性,像 matched 数组中的组件引用,这会使 JSON.stringify 抛出错误,因为它无法处理循环引用。

ok,问题找到了,缓存route数据,里面matched数据会导致出现问题,需要过滤掉它

最后persist这么设置:

const useTagsViewStore = defineStore(
  'tags-view',
  {
    state: () => ({
      visitedViews: [],
      cachedViews: [],
      iframeViews: []
    }),
    actions: {
        // 操作方法,我就不粘贴了
    },
    persist: {
      storage: sessionStorage,
      serializer: {
        serialize: (value) => {
          // 递归处理 state 中的 Route 对象
          const processRoute = (route) => {
            if (!route || typeof route !== 'object') return route;
            // 提取需要的路由信息
            const { fullPath, hash, href, meta, name, params, path, query, title } = route;
            return { fullPath, hash, href, meta, name, params, path, query, title };
          };

          // 处理 visitedViews、cachedViews 和 iframeViews 中的 Route 对象
          const processedState = {
            ...value,
            visitedViews: value.visitedViews.map(processRoute),
            iframeViews: value.iframeViews.map(processRoute),
          };

          return JSON.stringify(processedState);
        },
        deserialize: (value) => JSON.parse(value)
      }
    }
  })

export default useTagsViewStore

困扰我3天的问题终于解决了,希望对你们有帮助,帮助到了的话帮我留个言吧,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值