React - 路由模式 BrowserRouter 和 HashRouter 的区别与使用
一. 路由模式 BrowserRouter 和 HashRouter 的区别
- 底层原理不一样
(1)BrowserRouter
使用的是H5
的history API
,不兼容IE9及以下版本。
(2)HashRouter
使用的是URL
的哈希值。 - path表现形式不一样。
(1)BrowserRouter
的路径中没有#
,例如:http://localhost:3000/home
(2)HashRouter
的路径包含#
,例如:http://localhost:3000/#/home
- 刷新后对路由state参数的影响。
(1)BrowserRouter
没有任何影响,因为state
保存再history
对象中
(2)HashRouter
刷新后会导致路由state
参数的丢失 HashRouter
可以用于解决一些路径错误相关的问题。- 一般使用
BrowserRouter
模式。
二. 路由模式 BrowserRouter 和 HashRouter 的使用
HashRouter
模式import React from "react"; import ReactDOM from "react-dom"; import { HashRouter } from "react-router-dom/"; import App from "./App"; ReactDOM.render( <HashRouter> <App /> </HashRouter>, document.getElementById("root") );
BrowserRouter
模式import React from "react"; import ReactDOM from "react-dom"; import { BrowserRouter } from "react-router-dom/"; import App from "./App"; ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById("root") );