解决Vue3动态添加路由后刷新白屏的问题

news/2024/7/8 1:55:25

简介

使用router.addRoute()动态添加路由后正常点击没问题,一刷新就白屏。
原因:路由守卫放行的时候,动态路由组件还没有渲染完毕。

具体原因分析

根本原因就是组件没有渲染完毕路径就发生了跳转。侧面也说明了地址栏的响应速度大于路由,也就是地址栏已经跳转了但是路由却还没有渲染完毕,所以就是白屏。

实例说明

在这里插入图片描述
当再次刷新时,没有用户信息,所以需要再次获取,获取到之后就直接next(),问题就在这里,直接就放行了,但是组件还没有渲染完毕就放行了。必然是白屏。

解决方法

在这里插入图片描述
next()方法里面使用...to,等待组件渲染完毕再放行即可。replace:true这个可加可不加。

话外语

有一点我认为远比解决这个问题还重要,理解了会对next()的理解更上一层楼。
大家有没有疑惑?为什么用户名不持久化存储,每次都需要发请求获取,其实这是为了制造出口,别懵,听我到来。
在这里插入图片描述
这是完整的判断,有用户名直接放行,没有用户名发请求在获取一遍。他的顺序是刷新之后没有用户名,走else,等待to组件渲染完毕,完后重定向,继续进入路由守卫,此时有了用户名直接放行,完成退出循环。
所以你可以使用next(...to)解决白屏,但是务必要设置一个出口,也就是next(),如果没有这个出口就会进入死循环


http://lihuaxi.xjx100.cn/news/1357734.html

相关文章

【C语言督学训练营 第十九天】关于C语言语法的一些补充

文章目录 1.条件运算符与逗号运算符2.自增自减运算符3.位运算4.switch do-while补充5.二维数组&二级指针6.总结 1.条件运算符与逗号运算符 条件运算符是C语言中唯一的一种三目运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑与运算符就是双目运算符…

[Eigen中文文档] 深入了解 Eigen - 类层次结构

文档总目录 本文目录 原则Core 类基类继承图 英文原文(The class hierarchy) 本页面介绍了Eigen类层次结构中 Core 类的设计及其相互关系。一般用户可能不需要关注这些细节,但对于高级用户和Eigen开发人员可能会有用。 原则 Eigen的类层次结构的设计是为了避免虚…

深入浅出学好信号完整性概述总结专题

🏡《总目录》   🏡《宝典目录》 1,概述 本专题对信号完整性的本质,重要性,解决的问题,及解决方法等进行总结,帮助读者更加深入的理解信号完整性,并建立解决信号完整性问题的方向。…

ubuntu 20.04上安装更新的nodejs

How To Install Node.js on Ubuntu 20.04 | DigitalOcean ubuntu20上默认用apt install 安装的nodejs版本是 v10.几 官方提供了对应的脚本, 下面的setup_19.x 如果你需要v18,就把19改成18. # node 安装较新的版本 curl -sL https://deb.nodesource.co…

Java源码规则引擎:jvs-rules数据扩展及函数配置说明

jvs-rules数据拓展节点 数据拓展是数据可视化加工过程中的重要工具,它核心的作用是对原有数据表进行加工扩展,实现功能如下图所示 函数配置操作过程 操作说明 1、拖动数据拓展字段,并将字段拓展与之前的历史节点连接起来,点击数…

Redis底层封装细节

日常我们程序员在使用redis做缓存的时候,很少会直接使用到RedisTemplate直接操作k-v键值对,而是通过对RedisTemplate原生代码的封装,来构建我们日常便于使用习惯的代码来操作数据,这里我分享一下日常基本的对RedisTemplate底层的封…

【C++】STL反向迭代器模拟实现,迭代器适配器,迭代器类型简单介绍

反向迭代器 前言正式开始基本演示模拟实现的大致思路基本框架前置、--*重载->重载list和vector适配反向迭代器迭代器的类型库中reverse和sort模板参数中的迭代器reversesort 前言 本篇主要讲反向迭代器的模拟实现。 能够加深各位对泛型的理解。 前面我那篇string介绍里面…

将maven库中没有的jar包导入本地库后编译还提示缺这个jar包

Maven本地仓库有对应的jar包但是报找不到 问题原因 第一,你本地仓库对应的包文件夹下有_remote.repositories这个文件; 第二,你的项目现在连接不到下载这个包的仓库; 以上两点就是本地明明有对应的jar包,但项目中还…