react-router需要了解
BrowserRouter和HashRouter的区别
兼容性:HashRouter更好的兼容低版本浏览器,BrowserRouter可能you低版本浏览器不支持。
传参:HashRouter因为没有history,所以页面刷新或者前进后退state就没有了,而BrowserRouter有history,数据可以保留。传参方式如下:
1 | |
在凉中路有方式都可以接收到传过来的state,但是就像上面所说,页面刷新或者前进后退就有区别了。
ps:HashRouter传参可以用url进行参数的传递或者用redux
服务器端:HashRouter#后面的url不会发送给服务器,所以发送的url请求回来的是同一个页面,在同一个页面操作只改变哈希的话且没有js发送的请求是不会和服务器交流的,BrowserRouter对不同的url返回不同的页面,每次改变url都会发生请求
与UI的同步:HashRouter使用window.location.hash哈希部分保持UI与URL的同步,但是不支持location.key或location.state,所以有上面传参的问题,BrowserRouter使用HTML5历史API( pushState,replaceState和popstate事件),让页面的UI同步与URL。
react-router和react-router-dom
react-router: 实现了路由的核心功能
react-router-dom: 基于react-router,加入了在浏览器运行环境下的一些功能,所以引入react-router-dom就不需要引入react-router了,Switch、Route、Router、Redirect等组件是直接引入react-router中的,除此之外,react-router-dom还另外新增了Link、BrowserRouter、HashRouter组件。