通过this.$router.push跳转同一路由页面只会刷新一次的问题怎么解决

一、原因

Vue Router默认会认为同一路由之间的跳转是相同路由的导航,所以不会触发组件的重新渲染。

当我们连续重复跳转相同的路由导航时就会报错如:

Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/homePage".

我们可以手动捕获错误:在this.$router.pushPromise链中添加一个.catch()来捕获这个错误并处理它,例如给出一个警告。

this.$router.push('/homePage').catch(err => {if (err.name !== 'NavigationDuplicated') {throw err;} else {console.log('NavigationDuplicated error caught:', err);// 在这里处理错误,例如给出警告}
});

在实际开发中,我们经常会在路由文件中重写push方法,使其在导航重复错误时返回错误对象。

const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (location) {return originalPush.call(this, location).catch(err => err)
}
Vue.use(VueRouter)

当多个导航菜单用相同的路由时也会出现这种问题

二、解决方法

1、使用watch监听route对象

在组件中使用watch监听route对象的变化,当路由发生变化时手动触发组件的更新

watch: {$route(to, from) {if (to.path === from.path) {// 如果目标路由和来源路由的路径相同,则强制刷新页面this.$router.go();}}
}

2、使用key属性强制组件重新渲染

在需要刷新的组件中,通过设置标签的key属性为路由路径,以确保每次路由变化时都会强制重新渲染组件

<router-view :key="$route.fullPath" />

这样会导致所有路由组件都在每次路由变化时都重新渲染,这可能不符合实际需求,尤其是对于那些不需要强制刷新的路由组件而言。在这种情况下,我们需要一种更精细化的方式来控制路由组件的刷新行为。

如:条件性地使用<router-view>的key属性

① 在路由配置中,为每个需要强制刷新的路由组件设置一个唯一的名称或者特定参数

const routes = [{ path: '/foo', name: 'Foo', component: FooComponent },{ path: '/bar/:id', name: 'Bar', component: BarComponent },// 其他路由配置...
];

②在路由组件的模板中,使用路由的 name 或者特定参数的值作为 <router-view> key 属性值。

<!-- 根据路由组件的名称作为 key -->
<router-view :key="$route.name" /><!-- 或者根据某个特定参数的值作为 key -->
<router-view :key="$route.params.id" />

可以根据不同的路由组件动态地判断是否需要重新渲染,而不会影响其他不需要刷新的路由组件。

最后,使用着两种方法可以解决通过this.$router.push跳转同一路由页面只会刷新一次的问题,但它们也存在一些缺点:

  1. 性能影响
    使用watch监听$route对象或设置key属性强制组件重新渲染都会带来一定的性能开销,可能会影响页面的加载和渲染性能。
  2. 潜在的副作用
    强制重新渲染组件可能会导致一些意外的副作用,例如丢失用户输入的数据、重新触发组件生命周期钩子等。

页面强制刷新时,浏览器会重新加载整个页面,包括 JavaScript、Vue 实例以及所有组件,因此会导致所有状态都被重新初始化。比如点击导航按钮本来会根据路由匹配来给相应的菜单项添加 is-active 类,但是由于强制刷新了,这个类也被初始化了,那么导航按钮的显示没有被选中就会有问题。所以在开发中,尽量一个导航菜单对应一个路由。

暂时还没有找到好的解决办法,有其他方法的请多多指导。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ArcGIS中,矢量数据有.shp,.mdb和.gdb,为啥建议使用gdb?

在ArcGIS中,矢量数据可以存储在多种格式中,如 .shp (Shapefile)、.mdb (Microsoft Access Database) 和 .gdb (Geodatabase)。每种格式都有其特定的用途和优缺点,但通常推荐使用 Geodatabase(.gdb)格式,原因如下: 1. 更高的数据容量和性能 容量: Shapefiles 和 MDB 文…

有关钱包相关开发的库和依赖

Trezor 钱包 GitHub 组织&#xff1a;https://github.com/trezor说明&#xff1a;Trezor 是一款硬件加密货币钱包&#xff0c;它的团队开发了与助记词相关的许多工具和库。 Electrum 钱包 GitHub 仓库&#xff1a;https://github.com/spesmilo/electrum说明&#xff1a;Electru…

Pytorch中保存模型的两种方法

目录 一、保存整个模型二、只保存模型参数 一、保存整个模型 这种方法会保存模型的整个定义&#xff08;包括网络结构和参数&#xff09;。这样保存的模型可以直接被加载并使用&#xff0c;但前提是保存和加载模型的代码环境需要完全一致。 保存模型时使用代码&#xff1a; …

stm32的GPIO基本结构

1.带FT标号的引脚能容忍5V 2.GPIO系统架构 stm32的所有GPIO都是挂载在APB2总线上的 3.GPIO的基本结构 在上图中&#xff0c;左边就是寄存器&#xff0c;右边就是驱动器了 保护二极管的作用&#xff1a;VDD表示3.3V&#xff0c;如果输入的电压的值大于3.3V&#xff0c;那么这个…

企业级OV SSL证书,主要应用在哪些场景

我们来看看OV SSL证书的一个典型应用&#xff0c;即电子商务网站。随着电子商务的发展&#xff0c;网上购物已经成为人们日常生活的一部分。然而&#xff0c;这同时也带来了一个问题&#xff0c;就是用户在进行网上交易时&#xff0c;如何保证其个人信息、银行卡信息等敏感数据…

就业班 第三阶段(nginx) 2401--4.26 day5 nginx5 nginx https部署实战

三、HTTPS 基本原理 1、https 介绍 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;其实 HTTPS 并不是一个新鲜协议&#xff0c;Google 很早就开始启用了&#xff0c;初衷是为了保证数据安全。 近些年&…

BMP JPG PNG 介绍以及三者区别

BMP&#xff08;Bitmap&#xff09;、JPG&#xff08;Joint Photographic Experts Group&#xff09;和PNG&#xff08;Portable Network Graphics&#xff09;是三种常用的图像文件格式&#xff0c;各自具有独特的特性和应用场景。 下面是它们的详细介绍和区别&#xff1a; B…

免费实用在线小工具

免费在线工具 https://orcc.online/ pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/ha…

基于地图的平滑算法--佛洛依德路径平滑算法(FLOYD)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言基于地图的平滑算法--佛洛依德路径平滑算法(FLOYD)前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对*…

Python 数据库基类封装

目录 1.BaseEntity 2.t_user 3.DAOBase 4.UserDAO 刚开始用Python做Api后端&#xff0c;记录下学习过程 从数据库操作开始&#xff0c;定义实体&#xff0c;定义DAO层基类&#xff0c;及DAO业务类的使用 写的不好&#xff0c;有好的设计建议欢迎大家提出&#xff0c;一起…

Python 使用相对路径读取文件失败

python open一个问及那时使用绝对路径可以&#xff0c;但是使用相对路径时报错&#xff0c;找不到指定文件 解决步骤如下&#xff1a; 添加Python配置 在新增的配置Json文件添加下图红框这一行

知网怎么查重 知网查重的详细步骤

知网查重八个步骤&#xff1a;1. 访问官网&#xff0c;注册账号。2. 上传待查文档。3. 选择查重规则。4. 选择相似来源库。5. 提交查重任务。6. 等待查重结果。7. 获取查重报告。8. 下载查重报告。 知网查重的详细步骤 第一步&#xff1a;进入知网查重系统 打开浏览器&#x…

27.统一网关Gateway-路由断言工厂

在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件。 例如&#xff1a;Path /user/** 是按照路劲匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRouteP…

一篇文章让你搞懂联邦学习算法

联邦学习(Federated Learning)是一种分布式机器学习技术,它可以在不共享数据的情况下训练模型。这种技术在多个参与方之间协作构建共享的预测模型,同时保持每个参与方的数据本地化,不暴露给其他方。联邦学习特别适用于数据隐私敏感的场景,如医疗、金融和移动设备等。 定…

目标检测——3D玩具数据集

在数字化时代&#xff0c;计算机视觉技术取得了长足的进展&#xff0c;其中基于形状的3D物体识别技术更是引起了广泛关注。该技术不仅有助于提升计算机对现实世界物体的感知能力&#xff0c;还在多个领域展现出了广阔的应用前景。本文将探讨基于形状的3D物体识别实验的重要性意…

Python爬取网易云平台

爬取网易云音乐平台的数据可能涉及到版权、隐私和平台的使用条款等问题&#xff0c;所以在你开始爬取之前&#xff0c;请确保你了解并遵守网易云音乐的使用条款和相关的法律法规。 如果你是为了个人学习或研究目的&#xff0c;并且尊重版权和隐私&#xff0c;你可以使用Python…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式&#xff0c;该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

从阿里云迁移Redis到AWS的规划和前期准备

在将Redis实例从阿里云迁移到AWS之前,需要进行全面的规划和前期准备。以下九河云提供一些重要的步骤和注意事项: 1. 评估Redis使用情况 首先,您需要评估当前Redis实例的使用情况,包括实例规格、内存使用量、吞吐量、访问模式等。这将有助于选择合适的AWS Redis产品和实例类型…

一键设置jdk环境脚本

自动化脚本 一、使用方法 创建一个txt文本&#xff0c;放在和jdk存放的同一目录下&#xff0c;复制粘贴进我的代码&#xff0c;利用全局替换&#xff0c;将jdk1.8,改成你自己的jdk包名字&#xff0c;再重新把这个文件保存为.vbs文件。然后运行就行了 MsgBox "Runing s…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…