react-router-dom和react-router的区别

react-router-dom和react-router的区别

前言

在使用react-router-dom的时候,经常会和react-router搞混了,搞不清楚它们哪个跟哪,到底有什么关系,今天来总结一下。

结论

  1. react-router-dom是在react-router的基础上开发的,react-router-dom中很多组件都是直接从react-dom中直接导出的。所以安装了react-router-dom后就不用再安装react-router;
  2. 在react-router的基础上,额外提供了BrowserRouter、HashRouter、Link、NavLink组件,可以用于路由跳转。其中BrowserRouter、HashRouter用于替代react-router中的Router组件;Link、NavLink的作用类似于a标签;
  3. BrowserRouter和HashRouter
    • BrowserRouter是history模式路由,路由长这样http://abc.com/xxx,是通过浏览器的history.pushState和history.popState实现,可能会有一定兼容性,低版本的浏览器不支持,比如ie,部署到服务器上需要进行一定的配置,具体要配置什么,这里不做讨论;
    • HashRouter是hash模式路由,路由长这样http://abc.com#/xxx,浏览器通过监听hashchange来改变路由的,兼容性良好

在react-router-dom的modules源码中可以看到这些区别
在这里插入图片描述

Switch组件使用的问题

Switch组件会按照Route的书写顺序匹配,只找到第一个被匹配到的Route就立即停止继续匹配,并且把它渲染出来。

那么问题来了,我用exact不就可以了,为啥还需要用Switch呢? 不Switch组件而直接使用Route组件+exact,也可以做到Switch组件类似的效果。但是使用这种方法,就算匹配到了路由,它不会停止继续匹配,而是继续往后找,造成性能浪费。

参考资料:
1、react-router区别
2、switch组件的作用

### 反应路由器域与反应路由器的区别 #### 历史背景与发展 `react-router-dom` 是 `react-router` 的特定实现之一,专门用于浏览器环境中的React应用程序。随着Web开发的发展技术栈的变化,路由库也经历了迭代更新以适应新的需求最佳实践。 #### 主要差异点 ##### 1. 环境适配性 `react-router-dom` 特定于DOM环境中运行的应用程序,提供了针对HTML5历史API的支持以及链接处理等功能[^1]。相比之下,`react-router` 更像是一个抽象层,可以被不同平台的具体实现在之上构建,比如服务器端渲染(SSR),原生移动应用等场景下的变体如 `react-router-native`。 ##### 2. 组件集合的不同 两者都提供核心的路由管理功能,但在具体组件上有所区分: - **Link**: 在 `react-router-dom` 中存在 `<Link>` 组件来创建可点击的超链接,而在更通用版本里可能不存在此预定义组件。 - **BrowserRouter HashRouter**: 这些是专门为客户端web页面设计的历史对象封装器,在 `react-router-dom` 提供了这两种方式让用户选择如何管理同步URL状态变化;而基础版则不直接涉及这些概念[^2]. ```jsx import { BrowserRouter as Router } from 'react-router-dom'; function App() { return ( <Router> {/* 路由配置 */} </Router> ); } ``` ##### 3. API 设计哲学上的微调 虽然二者遵循相同的总体设计理念——即通过声明式的语法描述UI应该如何响应不同的路径匹配情况——但是在某些细节方面还是有细微差别。例如对于动态参数解析、嵌套路由支持等方面可能会有不同的表现形式或额外特性加入到 `react-router-dom` 当中去更好地服务于前端开发者的需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+ 安口木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值