美文网首页
前端路由

前端路由

作者: bestCindy | 来源:发表于2020-11-04 22:33 被阅读0次

什么是路由呢,路由就是根据不同的 url 地址展现不同的页面或者内容

路由分为两种 hash 模式history 模式

hash 模式

  • 这里的 hash 就是指 url 尾巴后的 # 号以及后面的字符
  • hash 也 称作 锚点,本身是用来做页面定位的,它可以使对应 id 的元素显示在可视区域内

原理

  • 首先需要全局安装 light-server:yarn global add light-server
  • 新建 hash.html
<body>
    <a href="#/a">A页面</a>
    <a href="#/b">B页面</a>
    <div id="app"></div>
    <script>
        function render() {
            app.innerHTML =  window.location.hash;
        };
        window.addEventListener("hashchange", render);
        render();
    </script>
</body>
  • 目录下运行 light-server -s . --port 3000
  • 打开 http://localhost:3000/hash.html
    hash.html
  • 点击 “A页面”


优点

  • 只有 “#” 符号前面的内容才会包含在请求中被发送给后端,所以就算后端没有对路由全覆盖,也不会出现 404
  • hash 值的改变后悔保存在浏览器的 history 中

缺点

  • 不太美观

history 模式

history API 是 H5 提供的新特性,允许开发者直接更改前端路由

原理

  • 新建 history.html
<body>
    <a href="javascript:toA()">A页面</a>
    <a href="javascript:toB()">B页面</a>
    <a id="app"></a>
    <script>
        function render() {
            app.innerHTML = window.location.pathname
        }
        function toA() {
            history.pushState({}, null, "/a");
            render();
        }
        function toB() {
            history.pushState({}, null, "/b");
            render();
        }
        window.addEventListener("popstate", render)
    </script>
</body>
  • 在目录下运行 light-server -s . --historyindex "/history.html" --port 3000
  • 点击 “A页面”


  • 一些 history API
    • history.replaceState({}, null, '/b') // 替换路由
    • history.pushState({}, null, '/a') // 路由压栈
    • history.back() // 返回
    • history.forward() // 前进
    • history.go(-2) // 后退2次

上面代码监听了 popstate 事件,改事件可以监听

  • 用户点击浏览器的前进和后退
  • 手动调用 history 的 back、forward、go
    监听不到
  • history 的 pushstatereplacestate

所以上述代码中 toAtoB 要手动调用 render

另外,history 模式改变 url 的方式会导致浏览器向服务器发送请求,如果匹配不到任何静态资源,就会返回一个 404

所以,这也是为什么 light-server 命令强制加了一个 history.html,这个参数的意思是如果资源不存在就会返回 history.html 页面的内容

优点

  • 相比于 hash 模式,比较美观
  • pushState 设置的 url 只能是和当前文档同源的 url
  • pushState 设置的 url 与当前的 url 一模一样时,也会添加到浏览器的 history 中,但是 hash 模式, # 后面的内容必须修改才会添加到记录栈中

缺点

  • 前端的 url 必须和向发送请求后端 url 保持一致,否则会报 404

原文
前端路由模式详解(hash和history)
https://www.cnblogs.com/ggbondlearn/p/12239651.html
https://juejin.im/post/6844904054087221256

相关文章

  • 第三十一节:Vue路由:前端路由vs后端路由的了解

    1. 认识前端路由和后端路由 前端路由相对于后端路由而言的, 在理解前端路由之前先对于路由有一个基本的了解 路由:...

  • 前端微服务化解决方案5 - 路由分发

    路由分发式微前端 从应用分发路由到路由分发应用 用这句话来解释,微前端的路由,再合适不过来. 路由分发式微前端,即...

  • vue - 路由模式

    1 路由的基本概念与原理 路由的本质就是对应关系; 在开发中, 路由分为前端路由和后端路由. 1.1 前端路由 概...

  • react-router-dom

    一、什么是前端路由 在我看来,前端路由和网络上的路由器功能很像。前端路由也是进行分发操作,只不过其分发的是页面跳转...

  • vue基础-路由(重要)

    前端路由的概念与原理 什么是前端路由 Hash 地址与组件之间的映射关系,前端路由可以将hash地址和组件关联起来...

  • CreateReactApp+ReactRouter4的使用

    路由基础介绍1,什么是前端路由? 路由是根据不同的 url 地址展示不同的内容或页面 前端路由就是把不同路由对应不...

  • 面试:谈谈对前端路由的理解?

    面试官想听到什么答案呢? 1、为什么会出现前端路由。 2、前端路由解决了什么问题。 3、前端路由实现的原理是什么。...

  • 前端路由(一)

    前端路由之变化url不发送请求 什么是路由?为什么要有前端路由? 首先,域名的组成:http://(协议)www....

  • vue学习笔记——vue-router

    1.什么是前端路由? 前端路由是根据不同的URL地址显示不同的内容或页面。 2.什么时候使用前端路由? 在单页面应...

  • vue-router 原理

    1、前端路由 在 Web 前端单页应用 SPA(Single Page Application)中,路由描述的是 ...

网友评论

      本文标题:前端路由

      本文链接:https://www.haomeiwen.com/subject/nsrnvktx.html