前端路由原理

embedded/2024/10/20 0:47:34/

概述

在Web前端单页面中,路由描述的是URL和UI的映射关系,通过监听URL的变化,然后匹配路由规则,显示相应的页面,并且无需刷新页面,但让这种映射方式是单项的,通过URL变化引起了UI的变化。

如何实现前端路由?

我们先来学习下前端路由实现的两种方式: HashHistory,这两种方式各有其优势和局限。

Hash模式(默认方式)

hash是URL中 (#)及后面的那部分,www.test.com/#/ 就是Hash URL,当# 后面的哈希值发生变化时,可以通过 hashchange 事件来监听到URL的变化,从而跳转对应的页面,常用作瞄点在页面内进行导航,改变URL中的Hash部分不会引起页面刷新,并且无论哈希值如何变化,服务端接收到的URL请求永远是www.test.com。另外Hash模式的兼容性也更好。

javascript">foo://example.com:8042/over/there?name=ferret#nose\_/   \______________/\_________/ \_________/ \__/|           |            |            |        |
scheme    authority       path        query   fragment

History模式

History 模式是HTML5新推出的功能,主要通过 pushStatereplaceState两个方法改变URL的path部分不会引起页面刷新,只会更新浏览器的历史记录。

javascript">//新增历史记录
history.pushState(stateObject,title,URL)
//替换当前历史记录
history.replaceState(stateObject,title,URL)

另外History提供了类似hashchangepopstate事件,但与之不同的是:我们需要通过点击浏览器的前进后退按钮时会触发popstate 事件,通过pushState/replaceState<a> 标签改变URL不会触发popstate事件。但我们可以通过拦截pushState/replaceState的调用和<a> 标签的点击事件来监测URL变化,所以我们也可以通过这样的方式监听URL的变化,只是没有了hashchange事件那么便利,History的兼容性相比较于Hash又要差一些。
在这里插入图片描述

Hash和History对比

☀️ Hash只可以更改 # 后面的内容,History模式可以通过API设置任意的同源URL。
☀️History 模式可以通过API添加任意类型的数据到历史记录中,Hash模式只能更改哈希值,也就是字符串。
☀️Hash模式无需后端配置,并且兼容性好。History模式在用户手动输入地址或者刷新页面时会发起URL请求,后端需要配置 index.html 页面用于匹配不到静态资源的时候。

今天的分享就到这里啦,感谢大家的阅览,小江会一直与大家一起努力,文章中如有不足之处,你的支持是我前进的最大动力,请多多指教,感谢支持,持续更新中 ……


http://www.ppmy.cn/embedded/128862.html

相关文章

中小型医院网站开发:Spring Boot入门

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;…

wifi、热点密码破解 - python

乐子脚本&#xff0c;有点小慢&#xff0c;试过多线程&#xff0c;系统 wifi 连接太慢了&#xff0c;需要时间确认&#xff0c;多线程的话系统根本反应不过来。 也就可以试试破解别人的热点&#xff0c;一般都是 123456 这样的傻鸟口令 # coding:utf-8 import pywifi from pyw…

微服务接口测试的通用注意点

微服务架构越来越流行&#xff0c;它将应用程序拆分成独立的服务&#xff0c;彼此通过接口通信。虽说各司其职&#xff0c;但要保证整个系统的高效运作&#xff0c;接口测试功不可没。 1. 理解业务流程 首先&#xff0c;全面理解每个微服务的业务逻辑和它们之间的交互是非常重…

英语单词之社会生活之聚会

一些关于聚会的单词和短语 句子 English中文What’s the plan?计划是什么&#xff1f;I’m going out with some friends.我要跟几个朋友一起出去。I don’t really feel like going out.我不是很想出去。What time suits you ?你什么时间合适&#xff1f;Where shall we m…

ubuntu安装golang并设置goproxy

在Ubuntu上安装Go语言&#xff08;Golang&#xff09;通常有几种方法&#xff0c;以下是一些常见的安装步骤&#xff1a; 方法一&#xff1a;使用包管理器安装 更新包列表&#xff1a; sudo apt update安装Go&#xff1a; sudo apt install golang-go验证安装&#xff1a; go …

Docker consul注册中心

一、consul 1.1、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。 起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。 直到后来出现了多个节点的分布式架构&#x…

MySQL中FIND_IN_SET(),IN()和LIKE区别

在 MySQL 中&#xff0c; FIND_IN_SET() 和 LIKE 都可以用于字符串的匹配查找&#xff0c;但它们有以下不同&#xff1a; 一、语法及功能 1. FIND_IN_SET(str,strlist) &#xff1a; 用于在以逗号分隔的字符串列表中查找特定字符串&#xff0c;并返回其位置。如果未找到则返…

8-基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台

1、板卡概述 板卡由我公司自主研发&#xff0c;基于6UCPCI架构&#xff0c;处理板包含双片TI DSP TMS320C6678芯片&#xff1b;一片Xilinx公司FPGA XC7K420T-1FFG1156 芯片&#xff1b;六个千兆网口&#xff08;FPGA两个&#xff0c;DSP四个&#xff09;&#xff1b;DSP与FPGA之…