React-Router 源码分析1

1、单页面应用的路由基本原理

demo1
router1.html
复制代码

以 hash 形式为例。

1、init 监听浏览器 url hash 更新事件。

2、route 存储路由更新时的回调到回调数组routes中,回调函数将负责对页面的更新。

3、refresh 执行当前url对应的回调函数,更新页面

当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示。

History API 可以实现 path 形式

demo2
router2.html
复制代码

react-router 是基于 history 模块提供的 api 进行开发的。

这个例子来简单模拟下 react-router 的模式。

Router 通过对 history 进行包装开发,针对 historyModule 的机制对 Router 也起到了作用,即historyModule.updateLocation() 将触发 Router.listen 中的回调函数

2、react-router 部分源码探索与实践

react-router 中 Router 部分源码

Router 在这里对 history 进行了一个监听,正常调用了 history 以后,这边就会接收到这个更新,回调函数将在 url 更新时触发, 并且触发一次setState,触发页面刷新

Route 部分源码

props.match为true 就会渲染出组件

mathPath 部分源码

dva-router——react-router-dom/ react-router-redux

应用

ConnectedRouter 为 react-router-redux 内的对象 ConnectedRouter 的标签

dva 的 router.js

dva 的 package.json

react-router-dom

Router / BrowserRouter / HashRouter / MemoryRouter / StaticRouter

BrowserRouter

HashRouter

MemoryRouter

<MemoryRouter> 组件在内存中保存“URL”信息,不会修改浏览器的地址栏,往往用于React Native 等非浏览器环境。

StaticRouter

<StaticRouter> 组件 不修改路由,这在服务器端渲染时很有用。

Route

Redirect

Switch

Link

react-router-redux

react-router-redux 是 React-Router 与 Redux 的深度集成,它将路由完全纳入 store 中进行管理,使 store 成为了 URL(或者说是 history)的数据来源,也使我们能够通过 dispatch action 的方式来修改 URL

ConnectedRouter

dispatch 就相当于调用了 history 的 push replace 等方法。当发起了一个dispatch并且正常调用了history以后,Router 就会接收到这个更新,并且触发一次setState 刷新页面

转载于:https://juejin.im/post/5c8cc642e51d4560b33a3fa2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值