React 中获取当前路由信息

在 React 中获取当前路由信息,根据使用的路由库不同(如 React Router v5/v6 或 Next.js),方法也有所区别。以下是常见场景的解决方案:


1. 使用 React Router v6

获取当前路径(pathname)、查询参数(search)等
import { useLocation, useParams, useSearchParams } from 'react-router-dom';function MyComponent() {// 获取路径信息(如 /users/123?name=foo)const location = useLocation();console.log(location.pathname); // "/users/123"console.log(location.search);   // "?name=foo"// 获取动态路由参数(如 /users/:id)const params = useParams();console.log(params.id); // "123"// 获取查询参数(URLSearchParams 对象)const [searchParams] = useSearchParams();console.log(searchParams.get('name')); // "foo"return <div>Current Path: {location.pathname}</div>;
}
获取路由匹配信息
import { useMatch } from 'react-router-dom';// 检查当前路由是否匹配某个路径
const match = useMatch('/users/:id');
if (match) {console.log(match.params.id); // 动态参数
}

2. 使用 React Router v5

获取路由信息
import { useLocation, useParams, useRouteMatch } from 'react-router-dom';function MyComponent() {const location = useLocation();const params = useParams();const match = useRouteMatch();console.log(location.pathname); // 当前路径console.log(params);            // 动态参数console.log(match.url);         // 匹配的URLreturn <div>Current Route: {location.pathname}</div>;
}
类组件中获取路由
import { withRouter } from 'react-router-dom';class MyComponent extends React.Component {render() {const { location, match, params } = this.props;return <div>Path: {location.pathname}</div>;}
}export default withRouter(MyComponent);

3. 在 Next.js 中获取路由

Pages Router(传统方式)
import { useRouter } from 'next/router';function MyComponent() {const router = useRouter();// 获取完整路由信息console.log(router.pathname); // "/posts/[id]"console.log(router.query);    // { id: "123" }(动态参数 + 查询参数)console.log(router.asPath);   // "/posts/123?name=foo"(浏览器显示的实际路径)return <div>Current Page: {router.pathname}</div>;
}
App Router(Next.js 13.4+)
// 在 Server Component 中
import { usePathname, useSearchParams } from 'next/navigation';export default function Page() {const pathname = usePathname();       // "/dashboard"const searchParams = useSearchParams(); // URLSearchParams 对象return <div>Path: {pathname}</div>;
}

4. 获取当前路由的额外场景

获取路由的 basename
// React Router v6
import { useMatches } from 'react-router-dom';
const matches = useMatches();
console.log(matches[0].pathname); // 包含 basename 的完整路径// Next.js (需手动处理)
const basePath = process.env.NEXT_PUBLIC_BASE_PATH || '';
监听路由变化
// React Router
useEffect(() => {const unlisten = history.listen((update) => {console.log('Route changed to:', update.location.pathname);});return unlisten; // 清理监听
}, []);// Next.js
useEffect(() => {router.events.on('routeChangeComplete', (url) => {console.log('Route changed to:', url);});
}, [router]);

5. 常见问题解决

问题:路由信息未更新
  • 原因:组件未被路由上下文包裹。
  • 解决:确保组件在 <BrowserRouter><Router> 内部:
    // 根组件中
    import { BrowserRouter } from 'react-router-dom';
    ReactDOM.render(<BrowserRouter><App /></BrowserRouter>,document.getElementById('root')
    );
    
问题:Next.js 中 router.query 初始为空
  • 原因:静态优化导致首次渲染时无参数。
  • 解决:添加加载状态判断:
    if (!router.isReady) return <div>Loading...</div>;
    

总结:按需选择方法

场景推荐 API示例
React Router v6useLocation, useParamsconst { pathname } = useLocation()
React Router v5withRouter, useRouteMatchexport default withRouter(MyComponent)
Next.js Pagesnext/routerconst router = useRouter()
Next.js App Routernext/navigationconst pathname = usePathname()
获取查询参数useSearchParams (React Router)const [params] = useSearchParams()
监听路由变化history.listen 或 Next.js 事件router.events.on('routeChangeComplete', ...)

根据你的路由库选择对应方法即可准确获取当前路由信息!

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

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

相关文章

Sklearn 机器学习 随机森林 网格搜索获取最优参数

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Sklearn 机器学习:随机森林 + 网格搜索获取最优参数实战指南 在构建机器学习模型时,…

力扣-101.对称二叉树

题目链接 101.对称二叉树 class Solution {public boolean check(TreeNode l, TreeNode r) {if (l null && r null)return true;if ((l null && r ! null) || (r null && l ! null))return false;if (l.val ! r.val)return false;return check(l…

从句--02-1--done,doing ,prep 做定语

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录定语1.done&#xff08;过去分词&#xff09;做定语一、过去分词作定语的位置二、过去分词作定语的语义特点三、过去分词作定语与现在分词作定语的区别四、过去分词作…

JVM全面解析

摘要&#xff1a;JVM是Java程序运行的核心环境&#xff0c;负责解释执行字节码并管理内存。其核心功能包括类加载与验证、字节码执行优化、内存管理与垃圾回收&#xff08;GC&#xff09;、跨平台支持及安全性保障。JVM架构包含程序计数器、虚拟机栈、本地方法栈、堆和方法区等…

SDC命令详解:使用write_script命令进行输出

相关阅读 SDC输出命令https://blog.csdn.net/weixin_45791458/category_12993272.html?spm1001.2014.3001.5482 write_script命令用于将设计中的属性设置命令输出为脚本文件&#xff08;其实它并不是一个SDC命令&#xff0c;归为此类只是为了方便管理&#xff09;&#xff0c…

‌CASE WHEN THEN ELSE END‌

‌CASE WHEN THEN ELSE END‌ 是SQL中实现条件逻辑的核心表达式&#xff0c;支持单字段匹配和多条件判断&#xff0c;适用于数据处理、分类统计等场景。‌基本语法形式‌SQL中CASE表达式有两种标准形式&#xff1a;1‌ 简单CASE表达式‌&#xff08;字段直接匹配&#xff09;C…

飞单诱因:管理漏洞与人性交织

飞单看似是 “员工个人行为”&#xff0c;实则是餐厅管理、激励机制、外部环境等多重因素共同作用的结果。要根治飞单&#xff0c;需先理清背后的 “动力源”—— 员工为何选择冒险&#xff1f;一、“收入失衡”&#xff1a;薪资与付出不匹配的 “补偿心理”基层员工&#xff0…

工作笔记-----FreeRTOS中的lwIP网络任务为什么会让出CPU

工作笔记-----FreeRTOS中的lwIP网络任务为什么会让出CPU Author: 明月清了个风Date&#xff1a; 2025.7.30Ps:最近接触了在FreeRTOS中使用lwIP实现的网络任务&#xff0c;但是在看项目代码的过程中出现了一些疑问——网络任务的优先级为所有任务中最高的&#xff0c;并且任务框…

在 CentOS 系统上安装 Docker

在 CentOS 系统上安装 Docker&#xff0c;可按以下步骤操作&#xff1a;一、卸载旧版本&#xff08;如存在&#xff09;bashsudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-…

【CVPR2025】FlowRAM:用区域感知与流匹配加速高精度机器人操作策略学习

文章目录FlowRAM&#xff1a;用区域感知与流匹配加速高精度机器人操作策略学习一、问题出在哪里&#xff1f;方法部分&#xff1a;从结构到机制&#xff0c;详解 FlowRAM 的内部设计逻辑1. 动态半径调度器&#xff1a;自适应注意力机制在 3D 感知中的实现2. 多模态编码器与序列…

图片查重从设计到实现(5)Milvus可视化工具

要通过网页&#xff08;Web&#xff09;访问和管理 Milvus 向量数据库&#xff0c;可以使用官方提供的 Milvus Web UI 工具&#xff0c;这是一款可视化管理界面&#xff0c;支持查看集合、向量数据、执行基本操作等功能。以下是具体的部署和访问方法&#xff1a; 一、部署 Milv…

Linux-awk与sed

文章目录一、AWK1. awk 是什么&#xff1f;2. awk 的基础语法2.1 选项2.2 模式2.3 动作3. awk 的内置变量4. 典型应用场景及示例4.1 打印特定列4.2 条件筛选4.3 使用正则表达式4.4 统计行数4.5 字段操作4.6 使用内置函数4.7 多文件处理4.8 使用自定义变量5. 高级应用&#xff1…

文件加密工具(勒索病毒加密方式)

语言&#xff1a;C# WPF功能&#xff1a;文件加/解密本程序不提供下载&#xff0c;该程序新手操作不当&#xff0c;可能会导致文件加密后无法解密问题&#xff0c;解密需要独立私钥private.key文件支持&#xff0c;没有私钥加密文件是无法被解密的。更新&#xff1a;2025年7月3…

IOC实现原理源码解析

Spring三级缓存流程图singletonObjects&#xff08;一级缓存&#xff09;&#xff1a;缓存经过了完整生命周期的Bean&#xff1b;arlySingletonobjects&#xff08;二级缓存&#xff09;&#xff1a;缓存未经过完整生命周期的Bean&#xff0c;如果某个Bean出现了循环依赖&#…

笔记本电脑磁盘维护指南:WIN11系统磁盘维护完全手册

1. 引言 在当今数字化时代,笔记本电脑已经成为我们工作、学习和娱乐不可或缺的重要工具。随着Windows 11操作系统的普及和应用,用户对于系统性能和稳定性的要求越来越高。然而,许多用户往往忽视了一个至关重要的方面——磁盘维护。磁盘作为计算机系统中负责数据存储和读取的…

李宏毅2025《机器学习》-第九讲:大型语言模型评测的困境与“古德哈特定律”**

摘要&#xff1a; 随着大型语言模型&#xff08;LLM&#xff09;的推理能力日益增强&#xff0c;如何公平、准确地评测其“智力”水平&#xff0c;成了一个极其棘手的问题。本文基于李宏毅教授的最新课程&#xff0c;深入探讨了当前LLM评测面临的困境。文章首先揭示了标准数学和…

Spring Boot集成Chaos Monkey:构建高韧性系统的故障注入实战指南

Spring Boot集成Chaos Monkey&#xff1a;构建高韧性系统的故障注入实战指南一、Chaos Engineering核心原理1.1 混沌工程价值矩阵1.2 Chaos Monkey核心攻击类型二、Spring Boot集成Chaos Monkey2.1 基础集成配置依赖引入配置文件 - application.yml2.2 高级攻击策略配置自定义攻…

AtCoder Beginner Contest 416(ABCDE)

A - Vacation Validation 翻译&#xff1a; 给你一个长度为 N 的字符串 S&#xff0c;它由 o 和 x 以及整数 L 和 R 组成。 请判断 S 中从第 L 个字符到第 R 个字符的所有字符是否都是 o。 思路&#xff1a; &#xff08;模拟&#xff09; 实现&#xff1a; #include<bits…

【AlphaFold3】网络架构篇(2)|Input Embedding 对输入进行特征嵌入

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a;【AlphaFold3】网络架构篇&#xff08;1&#xff09;|概览预测算法每日一言&#x1f33c;: 去留无意&#xff0c;闲看庭前花开花落&#xff1b…

秋招Day20 - 微服务 - 概念

什么是微服务&#xff1f;将一个大型的单体项目分割成一个个可以独立开发和部署的小服务&#xff0c;服务之间松耦合&#xff0c;可以通过轻量级通信机制&#xff08;比如HTTP&#xff09;相互协作微服务带来了哪些挑战&#xff1f; 介绍一下一下Dubbo&#xff1f;Dubbo是一个高…