hash路由模式

hash模式


hash模式是一种把前端路由的路径用井号 # 拼接在浏览器 URL 后面的模式。

一个完整的 URL 包括:协议、域名、端口、虚拟目录、文件名、参数、锚。

html 复制代码
https://www.wangyuegyq.top/utils/index.html?name=123&phone=123#home
  • 协议:https
  • 域名:www.wangyuegyq.top
  • 端口号:443,https默认端口号是443,http默认端口号是80,默认端口号可以不写
  • 虚拟目录:/utils
  • 文件名:index.html
  • 参数:name=123&phone=123
  • 锚部分:home(#后面的值)

hash作用


  1. 路由

    hash值的变化,会触发hashchange事件,这样我们就可以通过监听hashchanges事件来根据不同的hash值去渲染不同的UI,以实现路由切换的目的。

    更改路由方式:

    (1)a标签

    (2)location.hash、location.href

    (3)浏览器前进后退按键或者history.back、history.go、history.forward

    (4)history.pushState、history.replaceState(H5 history 新特性)

    html 复制代码
    <div>
      <a href="#home">首页</a>
      <a href="#article">文章</a>
      <div id="content"></div>
    </div>
    <script>
      window.onhashchange = (event) => {
        const hash = window.location.hash;
        const content = document.getElementById('content');
        if (hash === '#home') {
          content.innerHTML = '首页'; 
        } else if (hash === '#article') {
          content.innerHTML = '文章'; 
        }
      }
    </script>
  2. 定位

    hash也称作锚点,DOM id 结合,可以用于页面定位。

    html 复制代码
    <div>
    <span id="hash-position">定位点</span>
    <a href="#hash-position">点击定位</a>
    </div>

hash特点


  • hash的改变,不会访问服务器,不会刷新页面(hash 值是网页的标志位,HTTP 请求不包含锚部分,不会发送给服务器,对后端无影响)

  • hash的改变,会触发hashchange监听事件

  • hash的改变,会改变浏览器的历史记录

    这也是为什么当hash的改变(hash的改变会记录在window.hisotry中),不仅仅可以出触发hashchange事件,还会触发popstate事件(监听history对象变化的事件)

注意事项:


1. 如果改变的hash值与当前的hash值一致时,hashchang不会改变,但是popstate事件会执行(location.href更改时,执行,但是location.hash更改时,不会执行,两者执行时,都不会创建一条新的历史记录)。

2. 哪怕新的hash值和当前的hash值相同时,history.pushState方法会创建一条新的历史记录

更多内容,访问:

history
hash
单页面应用和多页面应用
React-Router源码分析-History库
History库源码分析-Action 动作类型
History库源码分析-createLocation
History库源码分析-createPath
History库源码分析-parsePath

相关推荐
丁总学Java11 天前
Redis-数据类型-Hash
redis·oracle·哈希算法·hash
银氨溶液14 天前
Map集合之HashMap细说
java·开发语言·后端·面试题·集合·hashmap·hash
寒冬小子1 个月前
每天50个JAVA八股~(十七)
java·开发语言·学习·面试·hash
Anakki1 个月前
【MySQL精通之路】SQL优化(1)-查询优化(4)-Hash联接查询
数据库·sql·mysql·hash·联接
xing.yu.CTF1 个月前
攻防世界-bug题目详解
开发语言·网络安全·php·bug·web·hash·xff
Jack_hrx1 个月前
全面解读ConcurrentHashMap:Java中的高效并发数据结构
java·数据结构·散列表·hash
Anakki1 个月前
【MySQL精通之路】InnoDB-内存结构-自适应哈希索引
数据库·mysql·hash·索引·自适应
中草药z2 个月前
Java 【数据结构】 哈希(Hash超详解)HashSet&HashMap【神装】
java·数据结构·哈希算法·set·map·hash·hash table
小小-菠萝2 个月前
多数元素——java
java·算法·leetcode·hash
LostSpeed3 个月前
openssl3.2 - exp - class warp for sha3-512
hash·openssl·sha3-512