• 了解前端路由


    路由有两种模式

      1. 传统模式

        传统模式呈现的界面,每次跳转页面都会刷新,重新加载静态资源,呈现的内容通过后端返回的html渲染。  缺点: 用户体验差, 优点 SEO 好

      2. 前端路由 (单页面应用)

        不同于传统路由。前端路由是 URL 与 UI 之间的映射关系,URL 改变驱动UI变化,也就是单向映射,不需要刷新页面 。 随着页面复杂化和需求逐日增多,前端开始走向 模块化和组件化, 使代码变得难维护,不可控,迭代难, 这时就有了 react,vue,ng 等, 共同的特点就是通过 js 去渲染页面,在页面上只有一个根入口,本质就是通过html5 API 对 url 进行改变和监听,来让dom 元素显示对应的视图

        **单页面应用有什么特点**
        跳转不好刷新页面,局部更新,用户体验好。
        对服务器压力小 服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍
        前后端分离 前端只做页面展示, 后端只做数据存储和计算
        **缺点**
        首次加载慢 首次加载会加载所有资源, 可以使用路由懒加载
        SEO 差 可以使用服务端渲染
        页面复杂度增加

    单页面应用有两种模式 hash history ,怎么能改变url 而不刷新页面, H5提供了两个API  onhashchange 和 onpopstate 

    1、hash 模式

      当URL的片段标识符更改时,将触发hashchange事件 (跟在#符号后面的URL部分,包括#符号) 

      路由里面#不叫锚点,称为hash    

     1 <!DOCTYPE html>
     2 <html lang="en">
     3   <head>
     4     <meta charset="UTF-8" />
     5     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     7     <title>Document</title>
     8   </head>
     9   <body>
    10     <a href="#/page1">page1</a>
    11     <a href="#/page2">page2</a>
    12     <div id="root"></div>
    13     <script>
    14       let app = null;
    15       // hashchange 首次进入不会自执行,需要手动触发
    16       window.onload = () => {
    17         app = document.querySelector('#root');
    18         handleHashChange();
    19       };
    20       window.addEventListener('hashchange', handleHashChange);
    21       function handleHashChange() {
    22         console.log(location.hash);
    23         switch (location.hash) {
    24           case '#/page1':
    25             app.innerHTML = '你好';
    26             break;
    27           case '#/page2':
    28             app.innerHTML = '他好';
    29             break;
    30           default:
    31             app.innerHTML = '哈喽,';
    32             break;
    33         }
    34       }
    35     </script>
    36   </body>
    37 </html>

    2、history 模式

      history模式其实跟hash模式path差不多 没有#而已,监听的方法不同
          pushState 向当前浏览器会话的历史堆栈中添加一个历史记录
      replaceState 向当前浏览器会话的历史堆栈中修改一个历史记录
      popstate 可以监听浏览器历史站的前进后退行为, history.back() history.forward() history.go()
      MDN上标注  history.pushState()或者 history.replaceState()不会触发popstate事件。popstate事件只会在浏览器某些行为下触发, 比 如点击后退、前进按钮(或者在JavaScript中调用 history.back()、history.forward()、history.go()方法),此外,a 标签的锚点也会触发该事件.
      注意: history模式 需要后端配合,页面跳转子路由后页面正常,但是刷新页面访问不到了,请求当前url 的路径, 服务器没有响应的响应或者资源 就会出现404,我们只需要在服务器配置如果URL匹配不到任何静态资源,就跳转到默认的index.html。
     

  • 相关阅读:
    卸载软件
    SourceTree安装
    lombok安装及使用
    Element学习使用
    Vue基础学习
    SpringBoot与Swagger整合
    @Valid 数据校验 + 自定义全局异常信息
    Spring Boot 运行原理
    JNDI学习总结(一):JNDI到底是什么?
    Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
  • 原文地址:https://www.cnblogs.com/dachengzizi/p/15548866.html
Copyright © 2020-2023  润新知