关于pinia的使用,官网其实已经有完整的关于【组件内】与【组件外】的使用方法
详情:https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html
关联项目:leanboot-vue3,leanboot-micro
一、问题描述
- 对于pinia的store的使用,如果在组件内的script setup中使用的,完全可以使用:
正式因为pinia在组件初始化前,已经通过【构建函数】useAppStore();注入了
<script setup>
import useAppStore from '@/store/app'
const appStore = useAppStore();
....
</script>
- 出问题的是,在组件外,例如router,mixins等使用store,就会报错
//@/router/index.js
//组件外使用pinia的store,需要在对应的方法中引入
import useAppStore from '@/store/app'
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的单例模式
//@/router/index.js
//错误的解决方法
import pinia from '@/store'
import useAppStore from '@/store/app'
const appStore = useAppStore(pinia);
虽然上面写法,不会在浏览器中报错,不过会导致pinia的一些功能错乱(因为整个应用中初始化了多个pinia)
- 特别是pinia-plugin-persist的持久化会失效..
三、正确的使用方法
正如官网所描述: