项目总结-前端路由hash和history

2024-06-24 06:52

本文主要是介绍项目总结-前端路由hash和history,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目总结-前端路由hash和history

router模块

路由需要实现的功能

  1. 当浏览器地址发生变化的时候,切换页面
  2. 点击浏览器后退前进的时候,网页内容发生变化
  3. 刷新浏览器,网页加载当前路由对应内容

路由主要是通过监听事件,并利用js实现动态改变网页内容,有两种实现方式

  1. hash模式:监听浏览器地址hash地址的变化,执行相应的js切换网页
  2. history模式:利用history API实现url地址改变,网页内容改变。

history和hash模式

history

window.history属性指向history对象,表示当前窗口的浏览历史,当发生改变的时候,会改变页面的路径,不会刷新页面,history对象保存了当前窗口访问过的所有页面网址

  • 通过pushState, replaceState来实现无感刷新跳转的功能。
和hash的区别
https://github.com/xxx
https://github.com/xxx/yyy
https://github.com/xxx/yyy/zzz

正常的页面应该是全部发生刷新,但是使用history模式,只有第一个会发生刷新,后面只会发生前端跳转,不会刷新页面。

存在的问题

对于history来说,解决了不少hash存在的问题,但是也带来的新的问题

  1. 使用history模式的时候,对当前的页面进行刷新的时候,此时浏览器会重新发起请求,如果nignx没有匹配得到当前的url, 就会出现404的页面
  2. 对于hash模式,虽然是改变了URL,但是不会被包括在http请求中,所以算是被用来知道浏览器的动作,不会影响服务端,改变hash不会改变真正的url,所以页面路径还是之前的路径,nginx也不会被拦截
  3. 因此,在使用history模式的时候,需要通过服务器来允许地址访问,如果没有出现这个设置,就容易出现导致404的出现。
hash

hash是URL中hash(#)及后面的那部分,也称散列值,常用作锚点来在页面中进行导航,改变URL中的hash部分不会引起页面刷新,不会随着请求发送到服务器。
所有的页面的跳转都是在客户端进行操作的,改变hash值不算是一个http请求,当前模式不适合seo优化。hash只能修改#后面的部分,所以只能跳转到当前url同文档的url。
通过hashchange事件监听URL的变化,可以通过location.hash来获取和设置hash值,通过浏览器的前进和后退触发网页跳转。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><ul><!-- 定义路由 --><li><a href="#/home">home</a></li><li><a href="#/about">about</a></li><!-- 渲染路由对应的 UI --><div id="routeView"></div></ul></ul>
</body>
<script>let routerView = document.getElementById('routeView')window.addEventListener('hashchange', () => {routerView.innerHTML = location.hash})window.addEventListener('DOMContentLoaded', () => {if(!localtion.hash) {location.hash = "/"} else {let hash = location.hashrouterView.innerHTML = hash}})
</script>
</html>

这篇关于项目总结-前端路由hash和history的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089465

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装