RangeError: Maximum call stack size exceeded,Vue路由无限循环跳转。

项目场景:

业务是根据打开的环境进行不同的操作,一下就是想到用Vue导航守卫来做,每次进入路由的时候都会根据环境做不同的操作。

问题描述:

一开始是这么写的,手快咔咔就一顿操作哈哈哈,相关业务代码就码上了哈。
RangeError: Maximum call stack size exceeded,Vue路由无限循环跳转
但是这时候就进了死循环了哈哈哈

RangeError: Maximum call stack size exceeded,Vue路由无限循环跳转。

原因分析:

在走else的时候,使用next({path:'/404'})跳转到404页面,但是在跳转之前就触发了beforeEach导航守卫,然后又走了else,导致每次在路由跳转之前都被守卫拦截下来进行下次跳转,如此反复,调用栈就溢出了。其实看到无限输出的“·····环境检测·····”,也应该知道是进了死循环了。

解决方案:

实际上在next({path:'/404'})的时候,守卫里的to.path就变成了"/404",所以可以根据to.path == "/404"来判断是直接next(),还是需要next({path:'/404'})
修改后的代码如下,问题解决:
RangeError: Maximum call stack size exceeded,Vue路由无限循环跳转。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue路由跳转时,如果出现"RangeError: Maximum call stack size exceeded"错误,通常是由于路由配置或路由导航守卫中的无限循环导致的。这种错误通常发生在以下情况下: 1. 路由配置中的循环引用:检查你的路由配置文件,确保没有出现循环引用的情况。例如,A页面跳转到B页面,B页面又跳转回A页面。 2. 路由导航守卫中的无限循环:检查你的路由导航守卫(beforeEach、beforeRouteEnter等),确保没有出现无限循环的情况。例如,在beforeEach中无限次地调用next()。 解决这个问题的方法是: 1. 检查路由配置文件,确保没有出现循环引用的情况。 2. 检查路由导航守卫,确保没有出现无限循环的情况。 3. 如果以上方法都没有解决问题,可以尝试使用Vue开发者工具进行调试,查看路由跳转的具体过程,以便找到问题所在。 范例:<<引用:router/index.js, router.beforeEach((to, from, next) => { if (to.path === '/login') { next(); } else { if (!localStorage.getItem('token')) { next('/login'); } else { next(); } }})。引用:router/index.js, router.beforeEach((to, from, next) => { if (to.path === '/login') { next(); } else { if (!localStorage.getItem('token')) { next('/login'); } else { next(); } }})。 以下是两种可能导致"RangeError: Maximum call stack size exceeded"错误的示例: 1. 路由配置中的循环引用 ```javascript // router/index.js const routes = [ { path: '/a', component: A, children: [ { path: '/b', component: B } ] }, { path: '/b', component: B, children: [ { path: '/a', component: A } ] } ] ``` 2. 路由导航守卫中的无限循环 ```javascript // router/index.js router.beforeEach((to, from, next) => { if (to.path === '/login') { next(); } else { if (!localStorage.getItem('token')) { next('/login'); } else { next(); } } }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值