React路由:HashRouter和BrowserRouter

作者:Kinglong    发表时间:2023-06-12 23:10   

关键词:BrowserRouter  路由缓存  

路由缓存问题

调试模式下,增加了路由项目,有时候访问相应路径的页面,无法成功。重新编译,重新启动服务,仍然无法访问。

解决方案:清除浏览器缓存,再访问就生效了

React路由的使用

HashRouter:监听浏览器地址hash值变化,执行相应的js切换。

import { HashRouter } from "react-router-dom";
render(){
    <Provider store={store}>
        <HashRouter>
            <App />
        </HashRouter>
    </Provider>
}

BrowserRouter:调用的是H5 history API。

import { BrowserRouter } from "react-router-dom";
render(){
    <Provider store={store}>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </Provider>
}
 

路由模式说明

hash路由实现原理:

  1. hash 指的是地址中 # 号以及后面的字符。称为散列值。
  2. 监听onhashchange事件,hash改变时,通过window.location.hash来获取和设置hash值。
  3. location.hash值的变化直接反应在浏览器的地址栏。
  4. 哈希历史记录不支持location.key和location.state

history模式路由原理:

  1. 使用HTML5的history API(pushState, replaceState和popState),让页面的UI与URL同步。
  2. BrowserRouter对state没有影响,state保存在history对象中。
  3. 通过state的方式传值给下一个页面的时候,当到达新的页面,刷新或者后退之后再前进,BrowseRouter传递的值依然可以得到。

官方更推荐使用browserRouter。