本文解决在封装的HTTP模块等非Vue组件的JS文件中调用Pinia时出现的getActivePinia()报错问题。核心原因是Pinia未在main.js中完成全局注册。通过新建stores/index.js导出实例,并在main.js和外部JS文件中正确引入及传入pinia实例,即可在组件外正常使用Pinia状态管理。
场景
在封装的HTTP模块中尝试使用Pinia,具体代码如下:

运行后出现报错信息:

Uncaught Error: [🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)“
报错原因
该错误表明在调用Pinia时,Pinia尚未在main.js中完成全局注册流程。

解决方法
第一步,在stores目录下创建index.js文件。

import { createPinia } from 'pinia'
const pinia = createPinia()
export default pinia
第二步,在main.js中引入该文件并注册Pinia。

import pinia from './stores'
app.use(pinia)
第三步,在http.js文件中引入Pinia实例,并将其作为参数传入useCommonStore。

import pinia from '@/stores/index.js'
import { useCommonStore } from '@/stores/common'
const commonState = useCommonStore(pinia)
操作完成。
总结
本文介绍了在组件外(.js文件)中使用Pinia的方法,更多相关内容可搜索本站往期文章或继续浏览后续文章,感谢支持!