BrowserRouter
它使用历史记录API,即它不适用于旧版浏览器(IE 9及更低版本和同期版本)。客户端React应用程序能够维护干净的路由,例如example.com/react/route,但需要Web服务器的支持。通常,这意味着应该为单页应用程序配置Web服务器,即,index.html为/ react / route路径或服务器端的任何其他路由提供相同的服务。在客户端,window.location.pathname由React路由器解析。React router渲染一个已配置为/ react / route渲染的组件。
此外,设置可能涉及服务器端渲染,index.html可能包含当前路线特有的渲染组件或数据。
HashRouter
它使用URL哈希,它对受支持的浏览器或Web服务器没有任何限制。服务器端路由独立于客户端路由。
向后兼容的单页应用程序可以将其用作example.com/#/react/route。该设置无法通过服务器端呈现进行备份,因为它是服务器端提供的/路径,因此无法从服务器端读取#/ react / route URL哈希。在客户端,window.location.hash由React路由器解析。与相似,React router会渲染一个已配置为/ react / route渲染的组件BrowserRouter。
最重要的是,HashRouter用例不仅限于SPA。网站可能具有传统或搜索引擎友好的服务器端路由,而React应用程序可能是在URL中维护其状态的小部件,例如example.com/server/side/route#/react/route。与/ server / side / route一起在服务器端提供一些包含React应用程序的页面,然后在客户端,React路由器会渲染一个已配置为/ react / route渲染的组件,这与之前的场景类似。