当前位置: 首页 > news >正文

在使用 router-link 进行路由跳转时,A页面跳转到A页面,资源要重新加载吗

文章目录

    • 问题
    • 需求
      • 情况1. 路由路径相同但参数不同
      • 情况2. 路由路径和参数都相同

问题

今天在做路由跳转的时候,发现页面在跳转相同页面时好像资源重新加载了

需求

在使用 router-link 从 A 页面跳转到 A 页面时,资源是否重新加载取决于路由配置和组件的使用情况:

情况1. 路由路径相同但参数不同

当使用 router-link 跳转到相同的路由路径,但携带不同的参数时,默认情况下组件实例会被复用,组件不会重新创建,生命周期钩子函数(如 created、mounted 等)不会再次触发,不过路由参数的变化可以通过 watch 监听 $route 对象来响应。

<template>
  <div>
    <!-- 跳转到相同路由但参数不同 -->
    <router-link :to="{ name: 'A', params: { id: 1 } }">跳转到 A 页面(id=1</router-link>
    <router-link :to="{ name: 'A', params: { id: 2 } }">跳转到 A 页面(id=2</router-link>
  </div>
</template>

<script setup>
import { watch } from 'vue';
import { useRoute } from 'vue-router';

const route = useRoute();

// 监听路由参数变化
watch(() => route.params, (newParams, oldParams) => {
  if (newParams.id !== oldParams.id) {
    // 处理参数变化
    console.log('路由参数变化,新的 id 是:', newParams.id);
  }
}, { deep: true });
</script>

情况2. 路由路径和参数都相同

当使用 router-link 跳转到相同的路由路径且携带相同的参数时,Vue Router 不会触发任何路由跳转,页面不会有任何变化,也就不会重新加载资源。
3. 强制重新加载组件
如果你希望在路由路径相同的情况下也重新加载组件,可以通过以下几种方式实现:
方法一:使用 :key 绑定路由参数
在路由组件上绑定一个唯一的 key,当路由参数变化时,key 也会变化,Vue 会认为这是一个新的组件实例,从而重新创建组件。

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

方法二:监听 $route 变化并手动刷新组件
在组件中监听 $route 的变化,当路由变化时,手动重置组件的数据或调用初始化方法。

<template>
  <div>
    <!-- 组件内容 -->
  </div>
</template>

<script setup>
import { watch } from 'vue';
import { useRoute } from 'vue-router';

const route = useRoute();

watch(() => route, (newRoute, oldRoute) => {
  if (newRoute.path === oldRoute.path) {
    // 手动刷新组件
    console.log('路由未变化,但手动刷新组件');
    // 可以在这里调用初始化方法
  }
}, { deep: true });
</script>

综上所述,默认情况下,相同路由跳转时组件会复用,资源不会重新加载;但可以通过一些方法来强制重新加载组件。

http://www.dtcms.com/a/56498.html

相关文章:

  • eBay日本站猫咪用品卖家数量激增60%,新机遇显现
  • Spring 无法解决循环依赖的 5 种场景
  • 嵌入式 ARM Linux 系统构成(3):根文件系统(Root File System)
  • Magento2根据图片文件包导入产品图片
  • 解决火绒启动时,报安全服务异常,无法保障计算机安全
  • 工具介绍《netcat》
  • 电脑如何拦截端口号,实现阻断访问?
  • 物联网设备数据割裂难题:基于OAuth2.0的分布式用户画像系统设计!格行代理是不是套路?2025有什么比较好的副业?低成本的创业好项目有哪些?
  • 股票交易所官方api接口有哪些?获取和使用需要满足什么条件
  • segment-anything分割万物python环境部署和实现
  • Seata:分布式事务的终极解决方案
  • vue3中插槽
  • ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框
  • 微服务的认识与拆分
  • 9.1go结构体
  • 第9章 管理日志(网络安全防御实战--蓝军武器库)
  • Linux13-TCP\HTTP
  • 条码扫描手持pda,推动服装零售门店管理效率
  • 大模型开发(四):PET项目——新零售决策评价系统(上)
  • 大白话CSS 优先级计算规则的详细推导与示例
  • HarmonyOS NEXT开发实战:DevEco Studio中DeepSeek的使用
  • uniapp小程序对接腾讯IM即时通讯无ui集成(1)
  • 手机屏幕摔不显示了,如何用其他屏幕临时显示,用来导出资料或者清理手机
  • 77.ObservableCollection使用介绍1 C#例子 WPF例子
  • golang从入门到做牛马:第六篇-Go语言变量存储数据的“小盒子”
  • ubuntu22.04安装RAGFlow配合DeepSeek搭建本地知识库
  • C# ArrayPool
  • LeetCode 102. 二叉树的层序遍历,BFS(广度优先搜索)(Python)
  • CCF-CSP第29次认证第一题 --《田地丈量》
  • C#使用winform实现简单的梯形图指令编译和执行,带编译器和虚拟机代码