随机掉落的项目足迹:解决TypeError: Cannot read properties of undefined (reading ‘push‘)报错

问题引入

下面是request.js中请求拦截器相关的代码

但是运行时却出现了报错

问题解决

useRouter() 是 Vue Router 提供的组合式 API,它只能在 Vue 组件的 setup() 函数中有效。如果在其他地方(例如 Axios 的拦截器中)调用它,可能会导致 routerundefined,因为这时没有 Vue 组件的上下文。

要解决这个问题,可以将将 useRouter() 替换为直接导入 router 实例

通过直接导入 router,你避免了上下文的问题。这意味着无论在什么地方(如 Axios 拦截器),都可以访问到路由实例,从而安全地调用 router.push() 来进行导航

类比思考

写到这里我又想到,pinia仓库的函数,比如useUserStore()为什么就可以脱离setup(),直接在请求拦截器中调用呢?

通过询问AI后得知:const userStore = useUserStore() 并没有报错是因为 Vue 3 和 Pinia 设计允许这种用法,Pinia 允许我们在任何地方调用 useUserStore(),即使是在请求拦截器中,而不仅仅是在组件的 setup() 函数中

在请求拦截器中直接调用 useUserStore() 可以避免在每个请求中重复获取 store。这种做法提高了代码的复用性,减少了复杂性

Pinia 的设计使得 useUserStore() 可以在任何地方调用而不局限于 setup(),这提供了更大的灵活性和便利性,让我们可以更轻松地进行状态管理。

相关推荐
铁皮饭盒11 分钟前
面试官:如何用 Bun + JS 实现安全的文件 MCP 工具集
前端·javascript·后端
探索前端41 分钟前
Cesium图层加载及影像服务添加
前端·cesium
阿懂在掘金1 小时前
Vue 弹窗新范式——代码减少、复用翻倍与 AI 时代的前端基建
前端·设计模式·前端框架
千纸鹤安安1 小时前
Compose Runtime → KuiklyUI:Applier 搭起的渲染桥梁
前端
李明卫杭州1 小时前
mise 管理工具详解
前端·后端
颜进强1 小时前
从零搭建私人 RAG 实战:让 Claude Code 按需查询知识库
前端·后端·ai编程
程序员黑豆1 小时前
鸿蒙应用开发:Scroll 组件从入门到实战
前端·华为·harmonyos
张人玉1 小时前
基于 Vue 3 + ECharts + Express + SQLite 构建的新能源汽车销量数据分析与可视化平台——新能源汽车销量数据分析系统
数据库·vue.js·sqlite·echarts
a1117762 小时前
三色软糖坠落玻璃池 THreeJS kimi
前端·人工智能·threejs
凤山老林3 小时前
防抖与节流:解决Web前段高频事件,性能优化的”YYDS“
前端·防抖节流