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

react-router 的原理

React Router 的核心原理:Hash 路由 & History 路由

React Router 本质上是前端实现路由跳转,不刷新页面,同时实现页面组件切换。

浏览器本身有两种方式能做到:

① Hash 路由(#/path)

例如:

https://example.com/#/home

通过监听:

window.onhashchange

切换 URL 中 # 后面的部分,不会触发页面刷新。

② History 路由(/home)

使用浏览器的 HTML5 history API:

history.pushState()
history.replaceState()
window.onpopstate

同样可以改变 URL,但不刷新页面。

React Router 的根本做法总结一句话:

监听 URL 变化(hash/popstate) → 根据 pathname 匹配对应组件 → 渲染该组件

就是这么简单明了。

React Router 原理分解

1. 用 Router 组件监听 URL

React Router 内部有两种 router:

BrowserRouter(使用 history API)

监听:

window.onpopstate = () => 更新页面

修改路由:

history.pushState({}, '', '/about')
HashRouter(使用 hash)

监听:

window.onhashchange = () => 更新页面

修改 hash:

window.location.hash = '#/about'
2. Router 保存当前路径(location)

每当 URL 改变:

  • Router 读取当前的 window.location.pathname 或 hash

  • 保存成自己的 location 状态

例如:

{ pathname: '/home' }

Router 就会把它挂到 React Context 上,让所有子组件都能访问。

3. Routes / Route 做“路径匹配”

例如:

<Routes><Route path="/home" element={<Home />} /><Route path="/user/:id" element={<User />} />
</Routes>

Routes 会拿到 Router 提供的 location.pathname
然后用内部的“路径匹配器”去匹配:

"/home" ——> 匹配 Home 组件
"/user/123" ——> 匹配 User 组件

匹配成功,就返回对应 component。

4. Route element 被渲染出来(最终输出 UI)

匹配到的组件会返回 render 出 React 节点:

<Router><Routes>匹配到什么 Route,就渲染它对应的 element</Routes>
</Router>

组件切换了,但是页面没有刷新。

<Link to="/home">首页</Link>

底层相当于:

history.pushState({}, '', '/home')

就是修改 URL。

navigate('/home');

底层也是 pushState 或 hash。

修改 URL → 路由监听到 → 路径匹配 → 渲染新组件

用一张图总结整个流程

用户点击 Link 或 navigate()↓
修改 URL(pushState / hash)↓
Router 监听到 URL 改变↓
更新 location 状态↓
Routes 根据 path 做匹配↓
匹配到 Route 后渲染元素↓
React 刷新组件(无刷新切换页面)

核心就是:URL 改了 → Router 匹配 → component 切换。

总结

react-router 实现前端路由的核心:利用浏览器的 History API 或 Hash 机制,监听 URL 变化,再用路径匹配渲染对应组件,而不刷新页面。

http://www.gsyq.cn/news/62246.html

相关文章:

  • 2025年售后完善的大胖瓶前置过滤器排名前十
  • 2025 年 11 月铣床厂家权威推荐榜:立式铣床/摇臂铣床/炮塔铣床/数控铣床/精密铣床/多功能铣床,高精度加工与稳定性能深度解析
  • Apipost和Apifox的收费标准
  • 2025年工业速冻冷库生产厂家推荐排行
  • Apipost和Apifox哪个更适合团队使用?
  • 国际商标去哪里购买?2025 最新测评出炉,这 3 家零风险闭眼选
  • 2025年地下室垃圾车源头厂家排行
  • 2025年PPH储罐厂家权威推荐榜单:PP储酸罐‌/PP储液罐‌/PPH缠绕储罐源头厂家精选
  • 国际商标购买正规平台 2025 实测:3 大高安全平台推荐 + 避坑指南
  • 2025 年 11 月喷涂加工厂家实力推荐榜:UV喷涂/丝印工艺/金属漆/橡胶漆/肤感UV/PU涂料/自动线加工/美容仪外壳/吹风机外壳/塑胶喷涂加工,精选优质表面处理解决方案
  • 2025年大件搬运品牌怎么选
  • 2025年度十大优质固化剂源头厂排行榜,精选固化剂源头厂家
  • 2025年食堂承包服务权威推荐榜:学校/工厂/企业/医院/科技园专业餐饮解决方案,高效管理与营养搭配的标杆之选
  • 2025年最新超融合系统代理商哪家靠谱
  • Python基于PyTorch实现多输入多输出进行BP神经网络回归预测项目实战 - 实践
  • 2025升降横移包胶轮定制厂家排行
  • 2025酒店地毯生产厂家口碑推荐榜单
  • 2025年下半年汽车水泵轴承品牌综合推荐指南:十大优质供应商盘点
  • 2025年宁波GEO优化服务商权威推荐榜单:十大顶尖企业全面解析
  • 计算机毕业设计必看必学~S38849+河北水利电力学院教师个人业务档案架构的设计与实现 ,原创定制程序、单片机、java、PHP、Python、小程序、文案全套、毕设成品等!
  • 2025年宁波GEO优化服务商推荐:知名企业盘点
  • 2025螺杆泵的型号及参数表产品排行榜
  • 2025国内电子万能试验机定做厂家排行
  • 钵钵鸡渗透
  • 2025年AI营销公司推荐排行榜
  • 2025年膜结构景观厂商推荐排行榜
  • 完整教程:使用IDEA创建Java项目以及IDEA常用的快捷键
  • 安装Anaconda - 教程
  • 2025年高速珩磨机厂家排名
  • 2025年定制深孔钻镗床供应厂家排行榜单