首页 > 其他分享 >Vue Router 的导航守卫内部使用pinia | 报错getActivePinia was called with no active Pinia. Did you forget to inst

Vue Router 的导航守卫内部使用pinia | 报错getActivePinia was called with no active Pinia. Did you forget to inst

时间:2023-01-28 02:33:05浏览次数:60  
标签:Vue const menuStore useMenuStore 报错 pinia import router

运行环境

"pinia": "^2.0.28",
"vue": "^3.2.45",
"vue-router": "^4.1.6"

触发错误代码

import { createWebHistory, createRouter } from 'vue-router'
import useMenuStore from "@/store/modules/menu";

/* Layout */
import Layout from '@/layout'

// 公共路由
export const constantRoutes = [
    {
        path: "/:pathMatch(.*)*",
        component: () => import('@/views/error/404'),
    },
    {
        path: '/401',
        component: () => import('@/views/error/401'),
    },
    ...
]

const router = createRouter({
    history: createWebHistory(),
    routes: constantRoutes
});
const menuStore = useMenuStore();
//全局前置路由
router.beforeEach((to, from, next) => {
    menuStore.currentMenu = to.params["name"];
    next()
})

export default router;

此时浏览器控制台会报如下错误,这是因为 pinia 还没有挂载到 app 上。

解决办法
pinia官网
pinia 官网已经清楚写明组件外应该如何使用 pinia:

在钩子函数外,pinia 还没有被挂载,但是在前置守卫函数中,pinia 已经被挂载了,所以获取全局状态,需要在钩子函数中进行,正确的实现如下:

// const menuStore = useMenuStore();
// 全局前置路由
router.beforeEach((to, from, next) => {
    const menuStore = useMenuStore();
    menuStore.currentMenu = to.params["name"];
    next()
})

标签:Vue,const,menuStore,useMenuStore,报错,pinia,import,router
From: https://www.cnblogs.com/echohye/p/17069583.html

相关文章

  • Vue三大路由守卫
    Vue路由守卫路由守卫,简单理解来说就是,当用户要进行一些操作时,需要用户的一些信息或数据或行为,判断过后,才会同意用户进行操作。说到这里,大家心里都或多或少有点理解了吧,官......
  • vue3的unplugin-auto-import自动引入
    vue3的unplugin-auto-import,setup语法糖下自动引入vue的基本apihttps://blog.csdn.net/weixin_52020362/article/details/127841641......
  • vue路由缓存的三种方式
    1.全部缓存使用Keep-alive标签包裹router-view就可以实现全部缓存<keep-alive><router-view></router-view></keep-alive>2.缓存单个指定的路由同样使用Keep-ali......
  • vue图片读取
    <el-form-itemlabel="头像"prop="pass"><imgv-bind:src="imgSrc"style="width:100px;"><inputtype="file"ref="myfile"id="fileId......
  • Vue3.2 新增 v-memo
    这个指令是​​Vue3.2​​新增的内置指令,大致的作用就是小幅度手动提升一部分​​性能​​官网文档​​cn.vuejs.org/api/built-i…​​用法在组件和元素都可以使用,主要是......
  • C# WPF 报错 CS0103 当前上下文中不存在名称的解决方法
    使用WPF时有时会出现此错误 但是此部分是软件自动生成的,所以不可能出错,有时候重启VS就会好,但是也会遇到重启几次仍然报错的情况这个问题的解决方法是,在调试中打开,启动......
  • Vue3 封装扩展并简化Vuex在组件中的调用
    如果你在项目中使用了vuex模块化,并且在项目中使用actions中函数调用频率高,推荐了解一下这种方式。比如下面两种方式调用,第一个是直接传参设置,第二个是添加了异步ajax......
  • 用 Vue.js 实现一个 JSON Viewer
    演示地址:http://json.imlht.com/vue-json-viewer-demo.html常用的JSON格式化工具JSON是一种轻量级的数据交换格式,相信大家用得比较多,平时也用了很多格式化工具......
  • Ubuntu22.04 x64 下运行.NET Core3.1程序 报错 usable version of libssl was found
    问题Ubuntu22.04x64下运行.NETCore3.1程序报错:usableversionoflibsslwasfound解决办法wgethttp://security.ubuntu.com/ubuntu/pool/main/o/openssl/libss......
  • 理解vue中的scope的使用
    我们都知道vueslot插槽可以传递任何属性或html元素,但是在调用组件的页面中我们可以使用templatescope="props"来获取插槽上的属性值,获取到的值是一个对象。注意:scope="......