haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.31k stars 3.25k forks source link

[react] React-Router的实现原理是什么? #774

Open haizhilin2013 opened 5 years ago

haizhilin2013 commented 5 years ago

[react] React-Router的实现原理是什么?

sin7777 commented 5 years ago

依赖 history 库,保证视图和 URL 的同步

用户可以通过手动输入或者与页面进行交互来改变 URL,然后向服务端发送请求获取资源,成功后重新绘制 UI。

NieShiyi commented 4 years ago

1.react-router依赖基础 - history,是一个独立的第三方js库,可以用来兼容在不同浏览器、不同环境下对历史记录的管理,拥有统一的API。具体来说里面的history分为三类:

*createHashHistory、createBrowserHistory、createMemoryHistory方法只是覆盖了某些基础公用方法,比如go(),replace(),push()等。BrowserRouter和HashRouter组件,前者使用pushState和popState事件构建路由,后者使用 hash 和 hashchange 事件构建路由。MemeoryRouter可以应用于像react native。

  1. 当url发生变化时,路由通过监听url的变化,我们不仅能直接获取和解析url路径,并且通过路由匹配,决定应该展示什么样的组件,即React组件的展示,授权路由进行控制,保证了url和视图的同步。
postbird commented 4 years ago

两部分来说: 客户端路由实现的思想:

react-router 实现的思想: