1、问题背景
我在一个 js 文件里需要使用 pinia 去修改状态存储里的内容,但是在引入 pinia 的时候,比如 cont store = useStore() 时发现报错:getActivePinia was called with no active Pinia.
说是实例在文件中使用的时候,pinia实例没有被挂载。发生错误的原因是因为我在js文件中
import { useStore } from '@/store' const store = useStore()
此时,pinia并没有完成挂载。
2、解决办法
(1)我们需要在store文件下新增一个基础文件,内容为
import { createPinia } from 'pinia' const pinia = createPinia() export default pinia
(2)然后在你引用的页面注册
import pinia from '@/store/pinia.js' import { useStore } from '@/store' const store = useStore(pinia)
就可以解决了
3、具体出现的原因是:
由于在main.js中,不管怎么注册,router总是比pinia之前创建,所以,当我们在router.js中使用pinia时,就会出现pinia还未注册的提示,我们只需要重新注册就行。
4、遇到的问题
在进行上面的改动之后,我发现对状态管理的字段的修改,并没有进行响应式的变化。怎么回事呢?后来发现是因为 main.js 里注册的有问题。就是在经过上面的改造后,我们还需要把原来在 main.js 里对 pinia 进行的注册,需要进行改造下。
import { createApp } from 'vue' import App from './App.vue' import router from './router' import { createPinia } from 'pinia' // ... const app = createApp(App) app.use(router).use(createPinia()).mount('#app') // 对应的位置需要改成下面这样 import pinia from './store/pinia.js' app.use(router).use(pinia).mount('#app')
标签:no,getActivePinia,js,pinia,router,import,useStore,store From: https://www.cnblogs.com/goloving/p/17561209.html