点击登录,精彩内容等着你

pinia使用pinia-plugin-persist插件做持久化失效,pinia的组件内与组件外使用的注意地方

全栈侠客

2022-12-16
pinia组件外使用store的时候,会有明显的报错,网上很多这种的错误解决方法,让persist插件持久化失效

关于pinia的使用,官网其实已经有完整的关于【组件内】与【组件外】的使用方法
详情:https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html

关联项目:leanboot-vue3,leanboot-micro

一、问题描述

  • 对于pinia的store的使用,如果在组件内的script setup中使用的,完全可以使用:
    1. <script setup>
    2. import useAppStore from '@/store/app'
    3. const appStore = useAppStore();
    4. ....
    5. </script>
    正式因为pinia在组件初始化前,已经通过【构建函数】useAppStore();注入了

  • 出问题的是,在组件外,例如router,mixins等使用store,就会报错
  1. //@/router/index.js
  2. //组件外使用pinia的store,需要在对应的方法中引入
  3. import useAppStore from '@/store/app'
  4. const appStore = useAppStore();

这个时候就会报错:

Error: []: getActivePinia was called with no active Pinia. Did you forget to install pinia?
at useStore (pinia.mjs 1696:19)

二、网上错误的解决方法

在组件外中,重新引入初始化pinia,注入到store的初始化中,这个时候,虽然不会报错,但是违反了pinia的单例模式

  1. //@/router/index.js
  2. //错误的解决方法
  3. import pinia from '@/store'
  4. import useAppStore from '@/store/app'
  5. const appStore = useAppStore(pinia);

虽然上面写法,不会在浏览器中报错,不过会导致pinia的一些功能错乱(因为整个应用中初始化了多个pinia)

  • 特别是pinia-plugin-persist的持久化会失效..

三、正确的使用方法

正如官网所描述:

阅读 8550     最后编辑 2022-12-16 12:08
文章补充
评论(0) 发表新评论
  • ...暂无评论...

我是有底线的 评论与点赞5分钟更新一次
回复评论
取消关闭

请先登录