一、History模式简介
为了更好地优化用户体验,目前很多前端应用都采用了单页面应用(SPAs)的方式。但是,这也带来了一个新的问题:SPAs实现了虚拟的单页面,但是URL却没变。
这时候就需要History模式解决这个问题。通过History.pushState()方法,我们可以在不刷新页面的情况下改变URL,同时也可以通过History.popState()方法监听URL的变化来实现页面更新。
// pushState()用法示例:
history.pushState({page: 1}, "title 1", "?page=1");
console.log(history.state) // {page: 1}
console.log(location.href) // http://localhost:8080/?page=1
// popState()用法示例:
window.addEventListener("popstate", function(event) {
console.log("location: " + document.location + ", state: " + JSON.stringify(event.state));
});
二、History模式优缺点
使用History模式优点在于:
1、更好的用户体验,不用每次都刷新完整页面;
2、更好的SEO,因为页面地址更加清晰明了。
不过,History模式也存在一些缺点:
1、确保服务端渲染(Serverside rendering)可以正确处理URL;
2、使用时需要一些额外配置,例如设置404页、服务端重定向;
3、需要使用渐进增强 (Progressive Enhancement),即如果用户的浏览器不支持 HTML5 history API 则为其提供一份合适的降级版本。
三、Webpack如何使用History模式
在Webpack中,可以通过使用webpack-dev-server中的historyApiFallback选项来启用History模式。
//webpack.config.js
module.exports = {
devServer: {
historyApiFallback: true
}
}
四、Vue Router的History模式实现
在Vue Router中,可以通过mode属性配置使用History模式。
//main.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home';
import About from '@/components/About';
Vue.use(Router);
export default new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: About
}
]
});
五、React Router的History模式实现
React Router也提供了History模式的实现,同样是通过mode属性配置。
//App.js
import React from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
import Home from './components/Home';
import About from './components/About';function App() {
return (
- <Link to="/">Home
- <Link to="/about">About
原创文章,作者:OEICL,如若转载,请注明出处:https://www.506064.com/n/369435.html
微信扫一扫
支付宝扫一扫