惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
雷峰网
雷峰网
S
SegmentFault 最新的问题
博客园 - 【当耐特】
博客园_首页
量子位
爱范儿
爱范儿
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
V
V2EX
美团技术团队
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Mengke's blog - Mengke's coding journey

年轻不是健康的免死金牌 深圳工作机会,前端 2025 年终总结 Skill 不是 MCP 的替代品:我理解的渐进式披露与选型原则 独立开发者如何开具发票 香港银行卡开户完整指南(2025年9月最新) 招商银行储蓄卡微信动账提醒恢复方法 再谈 MCP - Model Context Protocol(MCP)详解和开发教程 Get Human-Readable "Time Ago" in TypeScript 以「asset-price-mcp」为例,从 0 开发 MCP Server Model Context Protocol (MCP) 快速开始 DeepSeek + Dify 搭建本地知识库 An elegant solution for implementing optional property types using TypeScript 2024 年终总结 Quickly Create a Fullscreen WebView with Autoplay Support for Testing 以数字开头的 ID 在 querySelector 中的处理 String casing utilities in JavaScript Check if a string is a valid color Simple Event-Emitter/PubSub pattern Find which process is running on a certain port and kill it Markdown Code block's basic and advanced syntaxes Common npm commands to use locally Pnpm aliases How to safely rename a case sensitive file/directory in a git repo? A custom hooks to use an async effect A custom hooks to use local storage state 🤩 Mengke'blog 上线的这一年 🗼 五月底去了一趟日本,记录一下我的游记和攻略 网站性能优化:如何高效预加载大型静态资源 闰年之约 - 2024年2月29日
react-router-dom 路由基础教程
Mengke · 2020-07-27 · via Mengke's blog - Mengke's coding journey

一、安装

根组件index.js

使用 Router 组件包裹根节点来实现全局的路由访问。

结构有 BrowserRouterHashRouter 两种模式,分别对应 VUE-routermode: historymode: hash 两种模式。

注意:一定要使用 BrowserRouter 或 HashRouter 作为祖先组件包裹我们的根组件!

二、使用

使用 Route 组件来完成路由,类似于 Vue-router 的 <router-view></router-view> 标签。

匹配方式: 不精准匹配:这种情况下如果地址栏输入 /tv//tv 都会匹配:

精准匹配

方法1:在标签中加上 exact 属性:

方法2:使用 Switch:

注意:使用 Switch 时将一般路由写在最下,特殊路由写在上面。否则可能会匹配到普通路由上。

三、路由导航

react-router-dom 的路由导航分为组件式导航和编程式导航。顾名思义,组件式导航即通过组件进行导航完成路由的跳转,编程式导航就是在我们的逻辑代码内控制路由进行跳转,加下来分别介绍一下两种导航。

1、组件式导航:

使用 Link 标签进行跳转:

其实就是在页面内加入了一个a标签。但是经过实验,我们直接写 a 标签的话也可以跳转,但会有延迟,不如由 Link 为我们生成的 a 标签跳转速度快。通过 devtools 可以发现,结构上写法上没有任何区别,但由 Link 生成的 a 标签不会发生页面跳转,只会DOM操作。

路由高亮

使用 NavLink 标签

路由重定向

使用 Redirect 标签,一般配合 Switch 一块使用。

Redirect 标签一样属于普通路由,要放在特殊路由下边。

fromto 表示当路由匹配到 / 时重定向到 /movie

2、编程式导航:

在组件实例中, React-router-dom 自动帮我们在 props 中绑定了 history、location、match 三个对象,这样我们进行路由跳转就特别方便了。如果你熟悉 Vue-router 的话你会发现语法几乎一样。

  • history:主要包括路由跳转函数。

  • location:主要包含路径信息,类似于 Vue-router 的 $route。 其中的 state 属性包含上一个路由传递过来的参数。

  • match:主要使用其中的 params 获取动态路由的信息。

跳转到某个路由:

四、路由传参

1、query传参:

Vue-router 不同,react-router-dom 不会主动将 query 帮我们解析成对象,如果使用 query 进行传参的话我们需要自己去解析。

可以在 props/history/location/search 中拿到完整的 query 字符串。

2、动态路由传参:

在路由中设置动态路由,比如动态的 id,在 Movie 组件实例内 props/match/params 中可以拿到 id。

3、路由跳转时传参:

路由跳转时,可在 push 的第二个参数处传一个对象,我们在 /tv 组件实例上 props/location/state 上就可以拿到这个对象了:

五、子路由

react-router-dom 中没有很强的子路由的概念,所谓的子路由其实是由路由的嵌套来实现的,比如,我在 /movie 路由渲染的组件为 Movie 组件,我们继续在 Movie 组件中插入路由,并且路径设置为 /movie/jingsong ,就可以实现类似于子路由的效果。

Movie组件: