Vue3 中创建路由的history对象的工厂函数-- 聊聊createWebHistory 和 createWebHashHistory的区别

在Vue3中,createWebHistory和createWebHashHistory都是用于创建路由的history对象的工厂函数。它们的主要区别在于URL的格式以及对浏览器历史记录的影响。

1. createWebHistory
  • 使用HTML5的history.pushState() API,URL是基于浏览器的实际URL路径的。
  • 不会在URL中添加任何前缀,即URL路径看起来像普通的文件路径。
  • 不会在URL中添加任何特殊符号,比如#符号。
  • 需要服务器后端的支持,以防止在刷新页面时产生404错误。

下面是使用createWebHistory的实例代码:

// main.js
import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'
import App from './App.vue'
const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: () => import('./components/Home.vue')},
    { path: '/about',  component: () => import('./components/About.vue') }
  ]
})

createApp(App).use(router).mount('#app')

在这里插入图片描述

2. createWebHashHistory
  • 使用URL的hash部分来模拟完整的URL路径。
  • 在URL中添加一个#符号,并将路由路径添加到#符号后面。
  • 不依赖于服务器后端的配置,因此在刷新页面时不会产生404错误。
  • 可能会在URL中显示一个不太美观的#符号。

下面是使用createWebHashHistory的实例代码:

// main.js
import { createApp } from 'vue'
import { createRouter, createWebHashHistory } from 'vue-router'
import App from './App.vue'

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/', component: () => import('./components/Home.vue')},
    { path: '/about',  component: () => import('./components/About.vue') }
  ]
})

createApp(App).use(router).mount('#app')

在这里插入图片描述

总结:

  • createWebHistory使用基于浏览器实际URL路径的URL格式,比较美观,但需要服务器后端的支持。
  • createWebHashHistory使用基于URL的hash部分的URL格式,不需要服务器后端的支持,但在URL中会显示一个#符号。

选择使用哪个history对象取决于你的项目需求和后端配置。如果你的项目需要支持刷新页面,那么createWebHistory是更好的选择;如果你的项目没有服务器后端支持或者不需要支持刷新页面,那createWebHashHistory可以使用。

<think>嗯,用户让我以任课老师的身份向同学们解释前端路由是什么。首先,我需要确定学生们的知识水平。他们可能已经学过一些前端基础,比如HTML、JavaScript,可能接触过单页面应用(SPA)的概念,但具体到路由可能还不太清楚。 首先,我得从他们熟悉的地方入手,比如传统的网页跳转方式。传统情况下,每次点击链接都会向服务器发送请求,然后加载新页面。这个过程可能会有白屏,体验不够流畅。而前端路由则不同,它可以在不刷新页面的情况下切换内容,提升用户体验,这应该是前端路由的核心优势。 接下来,需要解释前端路由的工作原理。这里可能涉及两个部分:哈希模式历史模式。哈希模式利用URL中的#符号,改变哈希值不会触发页面刷新,通过监听hashchange事件来加载不同内容。而历史模式则使用HTML5的History API,通过pushStatereplaceState来修改URL,同时监听popstate事件。这部分可能需要用简单的例子说明,避免太技术化。 然后,要提到前端路由的应用场景,比如在单页面应用中的使用,如何让不同URL对应不同组件或页面,实现导航内容切换。可能需要举一个实际的例子,比如一个导航栏切换不同板块,页面不刷新,但URL变化,内容随之更新。 可能还需要对比前后端路由区别,强调前端路由由前端JavaScript处理,后端路由由服务器处理。这样学生能明确两者的分工。 学生可能会有疑问,比如前端路由如何实现URL变化但页面不刷新,或者为什么需要两种模式(哈希history)。这时候需要准备简单的解释,比如哈希模式兼容性更好,而history模式更美观但需要服务器支持。 另外,可能需要提到常见的库或框架,比如React RouterVue Router,说明这些工具如何简化前端路由的实现,让学生知道实际开发中如何使用。 在组织语言时,要尽量口语化,避免术语堆砌。使用比喻或类比,比如把前端路由比作书本的目录,点击目录跳转不同章节而不翻页,这样更形象。 最后,确认学生是否理解,可以通过提问或举例让学生思考,比如让他们设想一个使用前端路由的场景,或者如何手动实现一个简单的路由。 总结步骤:介绍传统方式的问题,引出前端路由的优势,解释两种实现模式,说明应用场景工具,对比前后端路由,举例说明,答疑解惑。这样结构清晰,学生容易跟随思路。</think>同学们好!今天我们来聊一聊「前端路由」这个概念。想象一下:你们在用手机 App 时,点击底部菜单切换页面时,整个 App 会完全刷新吗?不会对吧?这种“无刷新切换内容”的体验,就是前端路由的核心作用! --- ### 📚 **传统网页的痛点** 过去网页每次跳转(比如点链接、提交表单)都会向服务器请求新页面,导致: - **页面整体刷新**(白屏闪烁,体验卡顿) - **重复加载资源**(比如反复下载相同的 CSS/JS) --- ### 🚀 **前端路由是什么?** 前端路由是**由浏览器端的 JavaScript 管理的页面切换逻辑**,它能够: 1. **不刷新页面**的情况下更新内容 2. **同步修改浏览器地址栏的 URL**(看起来像跳转,但实际是“假的”) 3. **根据不同的 URL 展示不同的页面内容**(比如 `/home` 显示首页,`/about` 显示关于页) --- ### ⚙️ **实现原理** 常见两种技术方案: 1. **Hash 模式**(利用 URL 的 `#` 符号) - 例如:`http://example.com/#/home` - 改变 `#` 后的内容不会触发页面刷新,通过监听 `hashchange` 事件更新内容。 2. **History 模式**(基于 HTML5 的 `History API`) - 例如:`http://example.com/home`(真实 URL 一样) - 通过 `pushState()` `replaceState()` 修改 URL,监听 `popstate` 事件更新内容。 --- ### 🌟 **应用场景** - **单页面应用(SPA)**:比如 Vue/React 项目,通过路由切换不同组件。 - **保持页面状态**:比如翻页时保留筛选条件,无需重新加载。 - **提升用户体验**:快速响应,无白屏卡顿。 --- ### 📝 **举个栗子** 假设我们有一个导航菜单: ```html <nav> <a href="/home">首页</a> <a href="/about">关于</a> </nav> ``` 通过前端路由- 点击链接时,**阻止浏览器默认跳转行为**(用 JS 拦截) - 根据 URL(比如 `/about`),动态渲染对应的页面内容(比如显示「关于我们」的组件) - URL 变化,但页面不刷新! --- ### ❓ **对比后端路由** - **后端路由**:URL 变化 → 服务器处理 → 返回新页面(整页刷新) - **前端路由**:URL 变化 → JavaScript 处理 → 局部更新内容(无刷新) --- ### 🔧 **常用工具** 主流框架都有自己的路由库: - Vue → **Vue Router** - React → **React Router** - 原生 JS 也能手写(比如监听 URL 变化 + 动态渲染内容) --- ### ✨ **总结** 前端路由让 Web 应用更像“原生 App”,通过无刷新切换内容提升流畅度,是构建现代单页面应用(SPA)的基石。理解它,你就能开发出更丝滑的网页啦! 😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值