react 修复403页面无法在首页跳转问题

文章目录

问题描述

当用户在应用首页即触发权限错误时,系统无法正确跳转到403页面,而是正常显示首页,而点击任意导航栏时才能跳转403界面。通过分析,发现问题的在于: 在应用初始化阶段,路由实例尚未完全创建,但权限验证已经开始执行 ,导致403跳转时 router 对象为 null

也就是说,原AccessStore代码初始化如下:

javascript 复制代码
constructor(){
	this.router = null;
}

router只有在后续的一个守卫组件中调用createHashRouter才会设置。

而控制跳转代码如下:

javascript 复制代码
if (status === 403) {
    // 跳转到 403 页面
    accessStore.getRouter()?.navigate('/403');
    return false;
 }

这就导致一个问题:

应用的权限验证流程在 accessStore的一个函数中进行,这个函数发生在组件挂载早期。而完整的路由配置依赖于权限表的加载。当权限验证过程中出现403错误时,尝试通过 accessStore.getRouter()?.navigate('/403') 跳转,但此时 router 可能尚未初始化。

也就是说如果在 router 设置之前就发生了403错误, accessStore.getRouter() 会返回 null ,导致 navigate 方法无法调用。

解决方案

AccessStore 构造函数中提前初始化一个最小化的路由实例 ,确保即使在应用早期也能处理403跳转:

javascript 复制代码
constructor() {
    this.router = null;
    // 尝试提前初始化一个基本的router实例,避免在应用早期出现403错误时无法跳转
    try {
      // 创建一个最小化的路由配置
      const minimalRoutes: RouteObject[] = [
        {
          path: '/403',
          element: <DefaultForbiddenView />,
        },
      ];
      this.router = createHashRouter(minimalRoutes);
    } catch (error) {
      console.warn('Failed to initialize minimal router during AccessStore construction:', error);
    }
  }

也就是在 AccessStore 实例创建时(应用启动的最早阶段之一)就初始化一个只包含403页面的路由。这个最小化路由确保即使在完整路由配置加载前,系统也能处理权限错误跳转。


感觉说的乱七八糟的......总之是今天临时提出来的一个bug,后面有时间再整理一下吧。

相关推荐
林太白16 分钟前
js-var和let以及const区别
前端·面试
看谷秀27 分钟前
arkts-10 实战
前端·arkts
范小兵29 分钟前
# DevEco CLI实战:鸿蒙App「至客」从0开发到正式上架
前端·harmonyos
梦醒沉醉35 分钟前
7、表达日期和时间(前朝遗老Date)
javascript
半生过往43 分钟前
前端工程师学习智能体开发(一)
前端·学习·状态模式
白雾茫茫丶1 小时前
Vibecoding 一个主题切换动画库:13 种揭幕方式
前端·vue.js·react.js
计算机魔术师1 小时前
谷歌宣布 TPU 互联架构支持 100 万芯片规模,电力供应成 AI 基建核心瓶颈
前端
雪芽蓝域zzs1 小时前
第四十九节:TagsView 右键菜单(带三角箭头)给每个 tag 增加**鼠标右键菜单**(右键标签弹出:关闭、关闭其他、关闭全部)
前端·javascript·vue.js
এ慕ོ冬℘゜1 小时前
从零开发移动端医院挂号页面:适配、交互与前端实现详解
前端·javascript
宁渡AI大模型2 小时前
AI 全栈面试新趋势:Vibe Coding、前端、Java 后端高频面试题深度解析|河南宁渡科技有限公司编程教程
java·javascript·人工智能·python·ai大模型