Vue 3 和 Vue Router 中,使用 router.push 方法向同一个路由路径 (path) 推送带有不同查询参数 (query) 的路由对象

本文主要是介绍Vue 3 和 Vue Router 中,使用 router.push 方法向同一个路由路径 (path) 推送带有不同查询参数 (query) 的路由对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Vue 3 和 Vue Router 中,如果你尝试使用 router.push 方法向同一个路由路径 (path) 推送带有不同查询参数 (query) 的路由对象,Vue Router 默认不会触发组件的重新渲染,因为它认为你正在导航到相同的路由。这是因为 Vue Router 依赖路径 (path) 和路由参数 (params 在动态路由匹配中,而不是查询参数 query) 来判断路由是否改变。

然而,查询参数 (query) 的变化确实可以通过编程方式在组件内部检测到并作出反应。这里有几个方法可以实现你的需求:

方法 1: 使用 watch 监听查询参数

在你的组件内部,你可以使用 Vue 3 的 watch 或 watchEffect API 来监听 $route.query 的变化,并据此执行必要的逻辑。

<script setup>  
import { ref, watchEffect } from 'vue';  
import { useRoute } from 'vue-router';  const route = useRoute();  
const someData = ref(null);  watchEffect(() => {  if (route.query.id) {  // 假设 fetchData 是一个用于获取数据的函数  fetchData(route.query.id).then(data => {  someData.value = data;  });  }  
});  // 假设的 fetchData 函数  
function fetchData(id) {  // 示例代码,实际应替换为获取数据的逻辑  return new Promise(resolve => {  setTimeout(() => {  resolve({ id, name: `Evidence ${id}` });  }, 1000);  });  
}  
</script>

方法 2: 使用 key 强制重新渲染组件

虽然这不是直接监听查询参数变化的方法,但你可以通过在路由对象上添加一个 key 属性,并在每次查询参数变化时更新这个 key,来强制 Vue 重新渲染组件。这种方法比较取巧,但在某些情况下可能很有用。

// 假设在某个方法中执行跳转  
function navigateWithQuery(row) {  const queryKey = new Date().getTime(); // 生成一个唯一的时间戳作为 key  router.push({ path: '/home/evidence/evidencebank/myevidence', query: { id: row.id }, key: queryKey });  
}

但请注意,这种方法会导致整个组件的重新挂载,而不是仅仅更新数据,因此可能会带来不必要的性能开销。

方法 3: 使用 replace 而不是 push

如果你的需求是在不添加新历史记录的情况下改变查询参数,可以使用 router.replace 替代 router.push。但这并不会改变组件不重新渲染的问题,因此通常还是需要用到第一种方法。

结论

通常情况下,推荐使用第一种方法(使用 watch 或 watchEffect 监听查询参数变化),因为它既高效又能准确地处理查询参数的变化。

这篇关于Vue 3 和 Vue Router 中,使用 router.push 方法向同一个路由路径 (path) 推送带有不同查询参数 (query) 的路由对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090940

相关文章

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n