使用 Vue 或者 React 等前端渲染时,通常会有 hash 路由和 history 路由两种路由方式。那么这两种路由方式有什么区别?下面给大家介绍一下,希望对大家有所帮助!
hash路由和history路由这两种模式的区别,从以下几个方面梳理一下吧:
hash
: 即地址栏 URL 中的#
符号。 比如这个 URL:http://www.abc.com/#/hello
, hash
的值为 #/hello
。它的特点在于:hash 虽然出现在 URL 中, 但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。【相关推荐:《vue.js教程》】
history
: 地址栏中没有 #
。比如这个 URL:http://www.abc.com/hello
,更美观,是个正常的url,适合推广宣传。
history
: 在开发app的时候有分享页面,这个分享出去的页面就是用vue或是react做的,咱们把这个页面分享到第三方的app里,有的app里面url是不允许带有#
号的,所以要将#
号去除那么就要使用history模式,但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作,会出现404错误,那么就需要和后端人配合,让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就好了。
hash
: 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面;
history
: 利用了 HTML5 History Interface 中新增的 pushState()
和replaceState()
方法。
这两个方法应用于浏览器的历史记录栈,在当前已有的 back()
、forward()
、go()
方法的基础之上,这两个方法提供了对历史记录进行修改的功能。当使用这两个方法执行修改时,只能改变当前地址栏的 URL,但浏览器不会向后端发送请求,也不会触发popstate事件的执行,一般会出现404,这时候就需要和后端人配合,设置重定向。
一般情况下,hash 和 history 都可以,如果你是个颜值控,对 #
符号夹杂在 URL 里有些不爽。
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成URL 跳转而无须重新加载页面。调用 history.pushState() 相比于直接修改 hash,存在以下优势:
pushState()
设置的新 URL 可以是与当前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能设置与当前 URL 同文档的 URL;
pushState()
设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;而 hash 设置的新值必须与原来不一样才会触发动作将记录添加到栈中;
ushState()
通过 stateObject 参数可以添加任意类型的数据到记录中;而 hash 只可添加短字符串pushState()
可额外设置 title 属性供后续使用。
传统的路由是,当用户访问一个url时,对应的服务器会接收这个请求,然后解析url中的路径,从而执行对应的处理逻辑,这样就完成了一次路由分发。
前端路由是不涉及服务器的,是前端利用hash或者HTML5的history API来实现的,一般用于不同内容的展示和切换。
更多编程相关知识,请访问:编程视频!!
以上是浅析Vue中hash路由和history路由的区别的详细内容。更多信息请关注PHP中文网其他相关文章!