美文网首页
路由模式

路由模式

作者: 考拉程序媛 | 来源:发表于2023-08-30 10:36 被阅读0次

    为了构建 SPA(单页面应用)
    前端路由的核心,
    改变视图的同时不会向后端发出请求
    前端路由模式有两种:
    hash 模式 和 history 模式
    两者分别利用浏览器自由特性
    实现单页面导航

    hash 模式:
    window.location 或 a 标签改变锚点值,
    window.hashchange() 监听锚点变化
    
    history 模式:
    history.pushState()、history.replaceState() 定义目标路由,
    window.onpopstate() 监听浏览器操作导致的 URL 变化
    

    React Router 匹配路由由 mathPath 通过 path-to-regexp 进行,
    <Route> 相当于一个高阶组件,
    以不同的优先级和匹配模式渲染匹配到的子组件

    hash 
    url #
    history 
    HTML5 History - pushState() 和 replaceState() 
    
    history.pushState URL 跳转而无须重新加载页面
     相比于直接修改 hash,存在以下优势:
    新 URL 可以是与当前 URL 同源的任意 URL;
     只可修改 # 后面的部分,
    因此只能设置与当前 URL 同文档的 URL;
    
    新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;
    新值必须与原来不一样才会触发动作将记录添加到栈中;
    
     通过 stateObject 参数可以添加任意类型的数据到记录中; 
    只可添加短字符串;
    
    pushState() 可额外设置 title 属性供后续使用。
    

    SPA 虽然在浏览器里游刃有余,
    但真要通过 URL 向后端发起 HTTP 请求时,
    两者的差异就来了。
    尤其在用户手动输入 URL 后回车,
    或者刷新(重启)浏览器的时候。

    个人在接入微信的一个活动开发过程中 
    开始使用的hash模式,
    但是后面后端无法获取到我#后面的url参数,
    于是就把参数写在#前面,
    但是讨论后还是决定去掉这个巨丑的#
    
    于是乎改用history模式,
    但是开始跑流程的时候是没问题,
    但是后来发现跳转后刷新或者回跳,
    会报一个404的错误,找不到指定的路由,
    最后后端去指向正确的路由 
    加了/hd/xxx 去匹配是否有这个/hd/{:path} 
    才得以解决
    

    总结**

    1 hash 模式下,
    仅 hash 符号之前的内容会被包含在请求中,
    如 [http://www.abc.com](https://link.zhihu.com/?target=http%3A//www.abc.com),
    因此对于后端来说,
    即使没有做到对路由的全覆盖,
    也不会返回 404 错误。
    
    2 history 模式下,
    前端的 URL 必须和实际向后端发起请求的 URL 一致,
    如[http://www.abc.com/book/id](https://link.zhihu.com/?target=http%3A//www.abc.com/book/id) 
    如果后端缺少对 /book/id 的路由处理,
    将返回 404 错误。
    Vue-Router 官网里如此描述:
    “不过这种模式要玩好,还需要后台配置支持……
    所以呢,你要在服务端增加一个覆盖所有情况的候选资源:
    如果 URL 匹配不到任何静态资源,
    则应该返回同一个 index.html 页面,
    这个页面就是你 app 依赖的页面。”
    
    3 结合自身例子,
    对于一般的 Vue + Vue-Router + Webpack + XXX 形式的 Web 开发场景,
    用 history 模式即可,
    只需在后端(Apache 或 Nginx)进行简单的路由配置,
    同时搭配前端路由的 404 页面支持。
    

    相关文章

      网友评论

          本文标题:路由模式

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