深入理解 hash 和 history:网页导航的基础(下)

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 五、使用 hash 和 history 的场景
    • 适合使用 hash 的场景
    • 适合使用 history 的场景
  • 六、实际案例分析
    • 通过具体的代码示例来演示 hash 和 history 的用法
  • 七、注意事项和最佳实践
    • 使用 hash 和 history 时需要注意的一些问题
    • 一些最佳实践和建议
  • 八、总结
    • 总结 hash 和 history 的作用和应用场景

五、使用 hash 和 history 的场景

适合使用 hash 的场景

适合使用hash的场景包括:

  1. 简单的单页面应用(SPA):如果应用只有少数几个页面,或者页面之间的导航相对简单,可以使用hash来实现。

  2. 兼容性要求较高的应用:由于hash方式在所有的浏览器中都能正常工作,因此如果应用需要支持较旧的浏览器或移动设备,可以选择hash

  3. 不需要与服务器端进行交互的应用:如果应用不需要与服务器端进行交互,或者服务器端不需要处理 URL 中的hash部分,可以使用hash

  4. 快速开发原型:在开发初期或快速搭建原型时,可以使用hash方式,因为它相对简单,不需要太多的配置和代码。

在这里插入图片描述

总的来说,hash方式适用于简单的、兼容性要求较高的、不需要与服务器端进行交互的应用,或者在开发初期快速搭建原型时使用。

适合使用 history 的场景

适合使用history的场景包括:

  1. 复杂的单页面应用(SPA):如果应用有多个页面或路由状态,需要进行复杂的页面导航和状态管理,可以使用history来实现。

  2. 需要与服务器端进行交互的应用:如果应用需要与服务器端进行交互,或者需要在服务器端处理 URL 中的路径部分,可以选择history

  3. 提供更好的用户体验:由于history方式的 URL 不带hash符号,看起来更像是正常的 URL,因此可以提供更好的用户体验。

  4. 移动应用:对于移动应用,使用history可以提供更流畅的用户体验,因为在移动设备上,使用hash可能会导致一些问题,如链接无法正常工作等。

在这里插入图片描述

总的来说,history方式适用于复杂的、需要与服务器端进行交互的、提供更好的用户体验的应用,或者在移动应用中使用。

六、实际案例分析

通过具体的代码示例来演示 hash 和 history 的用法

以下是使用hashhistory实现前端路由的简单示例代码。

  1. 使用hash的示例代码:

    // 创建一个路由器实例
    const router = new Router({mode: 'hash',routes: [{ path: '/', component: Home },{ path: '/about', component: About },],
    });// 监听路由变化
    router.onReady(() => {console.log('Router is ready!');
    });// 应用到 HTML 页面上
    <div id="app"><RouterView />
    </div>
    

    在上述示例中,使用了Vue.jsRouter模块来创建一个简单的路由器。通过设置modehash,可以使用hash方式进行路由。定义了两个路由路径/''/about',并分别对应HomeAbout组件。

  2. 使用history的示例代码:

    // 创建一个路由器实例
    const router = new Router({mode: 'history',routes: [{ path: '/', component: Home },{ path: '/about', component: About },],
    });// 监听路由变化
    router.onReady(() => {console.log('Router is ready!');
    });// 应用到 HTML 页面上
    <div id="app"><RouterView />
    </div>
    

    与使用hash的示例类似,只是将mode设置为history,以使用history方式进行路由。

请注意,在实际应用中,可能需要根据项目的具体需求进行一些配置和调整,例如处理页面的加载状态、设置basename等。这些示例只是提供了一个简单的框架,你可以根据自己的项目进行扩展和定制。

七、注意事项和最佳实践

使用 hash 和 history 时需要注意的一些问题

使用hashhistory时需要注意以下问题:

  • hash模式的优点:只需要前端配置路由表,不需要后端的参与;兼容性好,浏览器都能支持;hash值改变不会向后端发送请求,完全属于前端路由。缺点:hash值前面需要加#,不符合url规范,也不美观。
  • history模式的优点:符合url地址规范,不需要#,使用起来比较美观。缺点:在用户手动输入地址或刷新页面时会发起url请求,后端需要配置index.html页面用户匹配不到静态资源的情况,否则会出现404错误;兼容性比较差,是利用了HTML5 History对象中新增的pushState()和replaceState()方法,需要特定浏览器的支持。

在实际应用中,你可以根据具体需求和目标来选择使用哪种模式。如果你更注重前端的开发和维护,并且不需要与后端进行交互,那么hash模式可能更适合你;如果你希望实现更加直观和符合标准的url路径,并且后端支持对应的路由配置,那么history模式可能更适合你。

一些最佳实践和建议

以下是一些使用hashhistory的最佳实践和建议:

  1. 根据应用需求选择模式:如果你的应用主要是单页面应用,并且不需要与服务器端进行交互,或者对浏览器兼容性要求较高,那么可以选择hash模式。如果你需要更好的用户体验和 URL 结构,并且服务器端可以处理路由,那么可以选择history模式。

  2. 合理配置路由:无论是使用hash还是history,都需要合理配置路由。确保每个路由都有唯一的路径,并根据应用的逻辑进行组织。同时,为了避免冲突,建议使用命名路由。

  3. 处理页面加载状态:在使用history模式时,需要特别注意处理页面的加载状态。可以使用Vue.js的生命周期钩子函数来监听路由的变化,并在需要时进行数据加载或其他操作。

  4. 设置适当的basename:如果你的应用部署在子路径下,例如https://example.com/my-app/,那么可以设置basename来确保路由的正确工作。在Vue.js中,可以通过Router对象的basename属性来设置。

  5. 考虑浏览器兼容性history模式需要较新的浏览器版本支持。在使用history模式时,需要确保你的应用能够在目标用户的浏览器上正常工作。如果对兼容性有要求,可以考虑使用hash模式或提供降级方案。

  6. 测试和调试:在开发过程中,务必进行充分的测试,包括在不同浏览器和设备上进行测试。使用浏览器的开发者工具可以方便地调试路由和查看路由状态。

在这里插入图片描述

总之,选择使用hash还是history模式取决于你的应用需求和目标用户。合理配置路由、处理页面加载状态、设置适当的basename以及考虑浏览器兼容性是使用这两种模式的关键。

八、总结

总结 hash 和 history 的作用和应用场景

hashhistory是前端路由的两种模式,它们有不同的作用和应用场景:

  • hash模式:
    • 作用:根据当前的路由地址找到对应组件进行重新渲染。
    • 优点:不需要服务端的支持,在开发模式下使用。
    • 缺点:带有“#”,不够美观。
    • 应用场景:一般在生产或开发模式下使用。
  • history模式:
    • 作用:所有路由呈现都需要通过监听popstate事件,来进行相应的路由匹配和跳转。
    • 优点:没有“#”,使用真正的 URL 路径,较为美观。
    • 缺点:需要服务端的支持。
    • 应用场景:项目上线时,有服务端的支持时使用。

在实际应用中,你可以根据具体需求选择合适的路由模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/220430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 特殊符号

目录 1. # 注释 2. &#xff1b;命令分隔符 3. .. 上级目录 4. . 当前目录 5. " " 换行&#xff0c;解析变量 6. 换行&#xff0c;不解析变量 7. \ 和 / 8. &#xff01;历史命令调用&#xff0c;取反 9. * 通配符 10. $ 调用变量 11. | 管道 12. || …

亿发零售云引领新零售时代:智能收银系统助力连锁门店多业态发展

近来&#xff0c;越来越多零售从业者认识到&#xff0c;线上和线下全渠道整合将成为国内消费市场的主要趋势。在这个趋势中&#xff0c;线下门店仍然被视为品牌发展的重要价值来源。 在连锁门店中&#xff0c;收银系统被认为是运营管理的关键工具&#xff0c;能够为品牌门店提供…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR&#xff1a;ControlNet 使得我们能通过输入额外的条件图&#xff08;如 Canny 边缘、人体姿态、深度图等&#xff09;&#xff0c;对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

基于Springboot的旅游网站设计与实现(论文+调试+源码)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Golang清晰代码指南

发挥易读和易维护软件的好处 - 第一部分 嗨&#xff0c;开发者们&#xff0c;清晰的代码是指编写易于阅读、理解和维护的软件代码。它是遵循一组原则和实践&#xff0c;优先考虑清晰性、简单性和一致性的代码。清晰的代码旨在使代码库更易管理&#xff0c;减少引入错误的可能性…

【老牌期刊】IF:6+,2天预审,3-5个月录用!

期刊简介 1区计算机智能类SCI 【期刊概况】IF&#xff1a;6.0-7.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff1b; 【终审周期】走期刊部系统&#xff0c;3个月左右录用&#xff1b; 【检索情况】SCI检索&#xff1b; 【WOS收录年份】2018年&#xff1b; 【自引率】…

记录一下github深度学习的错误

1.[visdom]无法正常启动服务问题解决 在Anaconda命令窗口中&#xff1a; 使用python -m visdom.server启动visdom服务时&#xff0c;卡在&#xff1a; Checking for scripts. Downloading scripts, this may take a little while 无法下载和启动服务。 ERROR&#xff1a;由…

如何将门脸图片文字识别为excel表格数据?

对于市场调查人员而言&#xff0c;最烦的事莫过于对路边的小店进行逐一记录了&#xff0c;有没有效率高点的办法&#xff0c;不用人工录入呢&#xff1f;我来告诉你一个秘密&#xff1a;先将小店的牌子&#xff08;门脸&#xff09;拍下来&#xff0c;然后用OCR软件批量转成exc…

【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《数据结构奇遇记》&#x1f516;墨香寄清辞&#xff1a;墨痕寄壮志&#xff0c;星辰梦未满。 通幽径心凝意&#xff0c;剑指苍穹势如山。 目录 &#x1f31e;1. 模式匹配的基本概念…

Ubuntu 常用命令之 sed 命令用法介绍

sed是一个在Linux和其他Unix-like系统中常用的流编辑器&#xff0c;用于对输入流&#xff08;文件或管道&#xff09;进行基本的文本转换。它可以非常方便地进行文本替换、插入、删除等操作。 sed命令的基本格式为 sed [options] command file(s)其中&#xff0c;常用的参数有…

【Python】—— pandas数据处理

Pandas 提供了丰富的数据处理功能&#xff0c;涵盖了从数据导入、清理、转换到分析和可视化的方方面面。以下是一份关于 Pandas 数据处理的主要内容&#xff1a; 1. 数据导入和导出 导入数据&#xff1a; import pandas as pd# 从 CSV 文件导入 df pd.read_csv(data.csv)# 从…

git 常见错误总结(会不断更新中。。)

常见错误 1. 配置部署key后git clone还是拉不下代码 执行以下命令 先添加 SSH 密钥到 SSH 代理&#xff1a; 如果你使用 SSH 代理&#xff08;例如 ssh-agent&#xff09;&#xff0c;将生成的私钥添加到代理中。 ssh-add ~/.ssh/gstplatrontend/id_rsa如果报错以下错误信息…

邮件营销:定义、优势与策略指南

什么是邮件营销&#xff1f;跨境电商或者出海企业可能会经常使用它&#xff0c;它是传统的营销方式之一&#xff0c;在上世纪80年年代得以运用。 邮件营销&#xff0c;英文全称为Email Direct Marketing&#xff0c;缩写为EDM。它是指在收件人许可的情况下&#xff0c;通过电子…

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布

目录 一、实验 1. GitLabCI环境设置 2.优化GitLabCI共享库代码 3.JenkinsCD 发布后端项目 4.再次优化GitLabCI共享库代码 5.JenkinsCD 再次发布后端项目 一、实验 1. GitLabCI环境设置 &#xff08;1&#xff09;GitLab给后端项目添加CI配置路径 &#xff08;2&#xf…

如何实现公网访问本地内网搭建的WBO白板远程协作办公【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cp…

Java小案例-SpringBoot火车票订票购票票务系统

目录 前言 详细资料 源码获取 前言 SpringBoot火车票订票购票票务系统 前端使用技术&#xff1a;HTML5,CSS3、JavaScript、VUE等 后端使用技术&#xff1a;Spring boot&#xff08;SSM&#xff09;等 数据库&#xff1a;Mysql数据库 数据库管理工具&#xff1a;phpstud…

CSS

一&#xff0c;盒子模型&#xff1a; 1&#xff0c;border&#xff1a; &#xff08;1 border-width: 5px; &#xff08;2 border-style: solid;实线 dotted :  点线。dashed :  虚线。solid :  实线边框 &#xff08;3 border-color: aqua; 简写&#xff1a;border&a…

为什么网站需要SSL证书?

在当今数字化的世界里&#xff0c;网站安全性已经成为互联网用户关注的重点。SSL证书&#xff08;Secure Sockets Layer&#xff09;作为一种安全技术&#xff0c;已经成为保障网站安全性的基本工具。下面让我们来看看为什么网站需要SSL证书以及安装后的各种好处。 永久免费SS…

C#中(, ||)与(, |)的区别

前言 在C#编程语言中&#xff0c;逻辑运算符用于组合和比较条件&#xff0c;以控制程序的流程和行为。在逻辑运算符中&#xff0c;有两对非常重要的运算符&#xff1a;&&和||、&和|。尽管它们看起来很相似&#xff0c;但其实它们有着不同的行为和使用场景。下面我们…