简介
今天做项目在 router 中使用 pinia 的仓库时遇到了一些问题,记录一下。
我的操作是,在 router 中的前置路由守卫中使用 pinia 的用户信息仓库,修改其中的属性。
问题
操作页面后,页面不更新,仓库中的属性不更新。
我最初想法是在前置路由守卫之外获取 pinia 仓库实例。之后再路由守卫中修改其中的属性。触发页面内容的改变。
但这先出现了报错:"getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"?
然后我在获取 pinia 仓库实例时传入了 createPinia() 函数:const userStore = useUserStore(createPinia())
这样就可以获取到 pinia 仓库实例了,并解决了报错。
注意:在 main.ts 中需要保证 pinia 的加载在 路由 的加载之前。app.use(createPinia()).use(router)
然后出现了现在的错误,仓库的内容不会更新。
最终发现的是在前置路由守卫之外定义的内容,不是响应式的,获取不到最新的内容。
原因
前置路由守卫之外定义的内容,不是响应式的,获取不到最新的内容。
需要在路由守卫中定义,当每次路由跳转时会获取到最新的内容。
解决
在前置路由守卫中使用 useStore() 函数获取 pinia 仓库实例:const userStore = useUserStore()