首页 > 其他分享 >前端路由原理总结

前端路由原理总结

时间:2023-08-17 10:11:43浏览次数:135  
标签:总结 hash URL 前端 url history 路由 页面

前端路由原理总结

hash路由(vue中的createWebHashHistory react中的HashRouter)

监听 url 中 hash 的变化,然后渲染不同的内容,这种路由不向服务器发送请求,不需要服务端的支持;

history路由(vue中的createWebHistory react中的BrowserRouter)

监听 url 中的路径变化,需要客户端和服务端共同的支持;

hash 路由

在 Hash 模式下,URL 中的 hash 值(即 # 号后面的部分)会被用来表示当前页面的状态,而不会引起页面的刷新。因此,使用 hash 模式可以实现无需后端支持即可进行前端路由。
例如,如果我们访问 http://example.com/#/home,则会渲染出 Home 组件,而不会刷新整个页面。如果我们点击链接切换到 http://example.com/#/about,则会渲染出 About 组件,同样不会刷新整个页面。
在 hash 模式下,Vue Router 会监听 URL 中 hash 值的变化,当 hash 值发生变化时,会自动匹配对应的路由并渲染对应的组件。
JS使用hash跳转到url-alan路由
location.hash="url-alan"
当页面中的 hash 发生变化时,会触发hashchange事件,因此我们可以监听这个事件,来判断路由是否发生了变化。

window.addEventListener(
    'hashchange',
    function (event) {
        const oldURL = event.oldURL; // 上一个URL
        const newURL = event.newURL; // 当前的URL
        console.log(newURL, oldURL);
    },
    false
);

history 路由

在 History 模式下,URL 中的路径会被用来表示当前页面的状态,而不再需要用 hash 值。使用 History 模式需要后端服务器的支持,因为在刷新页面时,需要向服务器发送请求获取对应的 HTML 页面。
例如,如果我们访问 http://example.com/home,则会渲染出 Home 组件,如果我们点击链接切换到 http://example.com/about,则会渲染出 About 组件,同样不会刷新整个页面。
在 History 模式下,Vue Router 会监听 URL 中路径的变化,当路径发生变化时,会自动匹配对应的路由并渲染对应的组件。
JS使用history跳转到url-alan路由

// history.pushState(state, title, url)
window.history.pushState({},'title','url-alan')

可以使用onpopstate事件监听历史记录的回退
在 history 路由中,我们一定会使用window.history中的方法,常见的操作有:
● back():后退到上一个路由;
● forward():前进到下一个路由,如果有的话;
● go(number):进入到任意一个路由,正数为前进,负数为后退;
● pushState(obj, title, url):前进到指定的 URL,不刷新页面;
● replaceState(obj, title, url):用 url 替换当前的路由,不刷新页面;
调用这几种方式时,都会只是修改了当前页面的 URL,页面的内容没有任何的变化。但前 3 个方法只是路由历史记录的前进或者后退,无法跳转到指定的 URL;而pushState和replaceState可以跳转到指定的 URL。如果有人问起这个问题“如何仅修改页面的 URL,而不发送请求”,那么答案就是这 5 种方法。
如果服务端没有新更新的 url 时,一刷新浏览器就会报错,因为刷新浏览器后,是真实地向服务器发送了一个 http 的网页请求。因此若要使用 history 路由,需要服务端的支持。

pushState 和 replaceState 两个方法跟location.hreflocation.replace 两个方法有什么区别呢?应用的场景有哪些呢?

  1. location.href 和 location.replace 切换时要向服务器发送请求,而 pushState 和 replace 仅修改 url,除非主动发起请求;
  2. 仅切换 url 而不发送请求的特性,可以在前端渲染中使用,例如首页是服务端渲染,二级页面采用前端渲染;
  3. 可以添加路由切换的动画;
  4. 在浏览器中使用类似抖音的这种场景时,用户滑动切换视频时,可以静默修改对应的 URL,当用户刷新页面时,还能停留在当前视频。

如何选择hash和history

总的来说,Hash 模式适合开发纯前端应用,不需要服务器的支持,但是 URL 比较丑陋。History 模式适合开发需要 SEO 支持的应用,但是需要服务器的支持,并且需要进行 URL 重写以去除 URL 中的 # 号。

如果你不需要考虑 SEO 问题,或者你的服务器配置不允许 URL 重写,那么可以选择使用 hash 模式;
如果你需要考虑 SEO 问题,或者你的服务器支持 URL 重写,那么可以选择使用 history 模式。

标签:总结,hash,URL,前端,url,history,路由,页面
From: https://www.cnblogs.com/yang10086/p/17636870.html

相关文章

  • 【校招VIP】前端校招考点之vue底层特性
    考点介绍:大家在面试途中遇到的相对多的问题,也是难点的问题一般都有vue底层原理。对于只会用但是不懂的小白来说真是太痛苦了,仅仅能说出来一些数据劫持,双向数据绑定,虚拟dom树的名词来说远远不够。一、考点题目1、Vue实现数据双向绑定的原理是什么?解答:Vue实现数据双向绑定的原......
  • JetLinks物联网平台常用的设计模式总结
    平台常用设计模式发布/订阅设计模式(观察者模式)JetLinks平台的消息处理中心(DeviceMessageConnector)类,使用发布/订阅设计模式将设备消息发布至消息总线内(EventBus),规则引擎(RuleEngine)、设备数据写入时序数据库(TimeSeriesMessageWriterConnector),则订阅消息总线内的数据异步对这些......
  • 软路由之mips大小端-待填坑
    中年男人的浪漫软路由+NAS,充电头。在给软路由部署alist(一个支持多存储的文件列表程序)的时候发现mips默认的是大端,需要专门下载el结尾的小端变体,之前也了解到RISCV里也存在大小端的问题,在X86上我们往往查看ELF程序往往是littleendian。今天面试正好被问到了,我就来探究下这个问......
  • 2023.8.16模拟赛总结
    T1Idiot的乘幂题目大意就是给\(a,b,c,d,p\)满足求解这题考场一开始发现\(\gcd(a,c)=1\)没啥用,后来发现其实很巧妙,直接辗转相除\(a,c\)同时维护\(\chi^a,\chi^c\)最后剩下来的就是\(\chi\)当然题解给了一个鬼才想到的做法构造\(\chi=\chi^1=\chi^{ax+cy}\)所以可以用exgc......
  • 【RocketMQ】MQ消息发送总结
    RocketMQ是通过DefaultMQProducer进行消息发送的,它实现了MQProducer接口,MQProducer接口中定义了消息发送的方法,方法主要分为三大类:send同步进行消息发送,向Broker发送消息之后等待响应结果;send异步进行消息发送,向Broker发送消息之后立刻返回,当消息发送成功/失败之后触发回调函数......
  • 前端八股文
    面试题(八股文)html常见面试题doctype的意义是什么:(写在html开头的那个单词)让浏览器知道所接受的html的合法性让浏览器能以标准的模式进行渲染HTML,XHTML,HTML5的区别:HTML属于SGMLXHTML属于XML,是HTML进行XML严格化的结果HTML5不属于SGML.也不属于XML(有自己的独立规范),比XHYTML宽......
  • 欧拉函数总结
    欧拉函数公式$n=p_1^{k_1}*p_2^{k_2}*\...\*p_n^{k_n}$$\phi(n)=n*\displaystyle\prod_{i=1}^{n}(1-\frac{1}{p_i})$试除法求欧拉函数#include<iostream>usingnamespacestd;intmain(){intn;cin>>n;while(n--){......
  • 今天遇到的bug总结
    1、BindingException:Parameter'name'notfound.Availableparametersare[employee,param1]这是我在使用xml文件编写SQL语句,来新增员工时遇到的报错,写着找不到参数"name",应该写做employee.name,后发现是我在mapper的intsave(Employeeemployee)方法中写了@Param("employee......
  • HTML5总结
    一、认识HTML5      (1)H5即是HTML的一个最新的版本,也是web的一个标准。(2)结合CSS3中的内容如:圆角、动画、过渡等效果,提高用户的体验。    (3)新增了javascript的api,使得操作dom更加的方便。(4)还增加了与硬件结合的功能:定位、重力感应.硬件访问......
  • GIC入门(一):中断类型,状态转换,中断路由,安全模型
    GIC是ARM的通用中断处理器,和ARMCortex-A和Cortex-R系列CPU搭配使用,M系列使用NVIC(nestedvectoredinterruptcontroller)。本篇文章介绍GICV3、V4的一些基本概念:中断类型,状态转换,中断路由,安全模型 1.InterrupttypesSPI:sharedphripheralinterrupt,可以设置为被所有PE处......