个人react-router-dom源码学习系列第三篇 —— BrowserRouter组件
一、更新
[2019-4-21]
Fixed
- 修复图片链接失效问题
Changed
- 完善文章格式
二、前言
上一篇主要学习了官方的react-router-dom
源码目录结构, 并且创建了我们自己的源码目录体系. 这一篇文章主要是一起学习BrowserRouter
的源码, 并且使用.tsx
完善自己的react-router-dom
.
三、分析
BrowserRouter
使用history
库的createBrowserHistory
API, 通过传递给其的相关props
, 创建history对象, 作为props
传递给react-router
的Router
组件, 源码是这样的:
1 | ... |
这里, 我们可以看到, 其实整个BrowserRouter源码里面, 最重要的就是如上的所示代码.
这里要特别注意的是, 源码中BrowserRouter
和HashRouter
都只是对Router
组件作了一层包装, 真正的路由顶层处理其实是在Router
组件, 所以BrowserRouter
似乎看起来不是很难懂…
四、实践
下面, 我们可以根据react-router-dom
的思想, 来书写我们的BrowserRouter
组件…
1 | // src/yyg-react-router-dom/components/BrowserRouter.tsx |
照猫画虎完成了BrowserRouter
组件, 这时候我们的项目应该是报错的, 因为我们的Router
组件没有定义相关的props
, 话不多说, 来到Router.tsx
, 写入基本的测试代码, 测试对应的history
API是否正常传递.
1 | // src/yyg-react-router-dom/components/Router.tsx |
如果在Router
组件中正常打印相关的内容, 则说明我们的BrowserRouter
基本完成了…
五、源码
源码地址: 点我
六、总结
总而言之, BrowserRouter
还算简单, 只是做了一层简单的封装, 下一篇主要学习一下Router
组件, 这也是最重要的组件
!
PS: 每天进步一点点