前端框架中的路由(Routing)和前端导航(Front-End Navigation)

聚沙成塔·每天进步一点点


本文回顾

  • ⭐ 专栏简介
  • 前端框架中的路由(Routing)和前端导航(Front-End Navigation)
    • 1. 路由(Routing)
      • 1.1 定义
      • 1.2 路由的核心概念
        • 1.2.1 路由表(Route Table)
        • 1.2.2 路由参数(Route Parameters)
        • 1.2.3 路由守卫(Route Guards)
        • 1.2.4 动态加载(Lazy Loading)
      • 1.3 常见前端框架中的路由实现
        • 1.3.1 React Router
        • 1.3.2 Vue Router
        • 1.3.3 Angular Router
    • 2. 前端导航(Front-End Navigation)
      • 2.1 定义
      • 2.2 导航的方式
        • 2.2.1 链接导航
        • 2.2.2 编程式导航
        • 2.2.3 路由守卫导航
    • 3. 路由与导航的协同工作
      • 3.1 URL与视图同步
      • 3.2 状态管理
      • 3.3 异步数据加载
    • 4. 性能优化
      • 4.1 路由懒加载
      • 4.2 优化导航体验
    • 5. 结论
  • ⭐ 写在最后

⭐ 专栏简介

前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个专栏中,我们将以问答形式每天更新,为大家呈现精选的前端知识点和常见问题解答。通过问答形式,我们希望能够更直接地回应读者们对于前端技术方面的疑问,并且帮助大家逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是各种常用框架和工具,我们将深入浅出地解释概念,并提供实际案例和练习来巩固所学内容。同时,我们也会分享一些实用技巧和最佳实践,帮助你更好地理解并运用前端开发中的各种技术。

在这里插入图片描述

无论你是寻找职业转型、提升技能还是满足个人兴趣,我们都将全力以赴,为你提供最优质的学习资源和支持。让我们一起探索Web开发的奇妙世界吧!加入前端入门之旅,成为一名出色的前端开发者! 让我们启航前端之旅!!!

今日份内容:前端框架中的路由(Routing)和前端导航(Front-End Navigation)





在这里插入图片描述


前端框架中的路由(Routing)和前端导航(Front-End Navigation)

1. 路由(Routing)

1.1 定义

路由(Routing)是在前端应用中管理和处理不同URL与对应视图之间的映射关系的机制。它决定用户访问不同URL时,应该显示哪一个页面或组件。

1.2 路由的核心概念

1.2.1 路由表(Route Table)

路由表是定义URL路径与对应组件之间关系的数据结构。每个条目(路由)包含一个路径和一个组件或视图。

1.2.2 路由参数(Route Parameters)

路由参数是从URL路径中提取的动态值,通常用于构建具有动态内容的页面。

1.2.3 路由守卫(Route Guards)

路由守卫是用于在导航到特定路由之前进行检查和处理的钩子函数,常用于权限控制和验证。

1.2.4 动态加载(Lazy Loading)

动态加载是在需要时才加载某个路由对应的组件,减少初始加载时间,提高性能。

1.3 常见前端框架中的路由实现

1.3.1 React Router

React Router是React生态中最流行的路由库,支持声明式路由配置和多种导航方式。

// 安装React Router
npm install react-router-dom// 定义路由表 (App.js)
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './Home';
import About from './About';const App = () => (<Router><Switch><Route exact path="/" component={Home} /><Route path="/about" component={About} /></Switch></Router>
);export default App;
1.3.2 Vue Router

Vue Router是Vue.js官方的路由库,支持嵌套路由、命名视图和多种导航守卫。

// 安装Vue Router
npm install vue-router// 定义路由表 (router/index.js)
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
];const router = createRouter({history: createWebHistory(),routes
});export default router;// 使用路由 (main.js)
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';createApp(App).use(router).mount('#app');
1.3.3 Angular Router

Angular Router是Angular框架自带的强大路由系统,支持模块化路由、路由守卫和惰性加载。

// 定义路由表 (app-routing.module.ts)
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';const routes: Routes = [{ path: '', component: HomeComponent },{ path: 'about', component: AboutComponent }
];@NgModule({imports: [RouterModule.forRoot(routes)],exports: [RouterModule]
})
export class AppRoutingModule {}// 使用路由 (app.module.ts)
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';@NgModule({declarations: [AppComponent, HomeComponent, AboutComponent],imports: [BrowserModule, AppRoutingModule],bootstrap: [AppComponent]
})
export class AppModule {}

2. 前端导航(Front-End Navigation)

2.1 定义

前端导航(Front-End Navigation)是指用户在前端应用中通过各种方式在不同页面或视图之间进行切换的过程。它包括点击链接、按钮导航、程序化导航等。

2.2 导航的方式

2.2.1 链接导航

使用HTML的<a>标签或框架提供的导航组件进行导航。

<!-- React Router -->
<Link to="/about">About</Link><!-- Vue Router -->
<router-link to="/about">About</router-link><!-- Angular Router -->
<a routerLink="/about">About</a>
2.2.2 编程式导航

通过框架提供的API在JavaScript代码中进行导航。

// React Router
import { useHistory } from 'react-router-dom';const MyComponent = () => {const history = useHistory();const navigateToAbout = () => history.push('/about');return <button onClick={navigateToAbout}>Go to About</button>;
};// Vue Router
export default {methods: {navigateToAbout() {this.$router.push('/about');}}
};// Angular Router
import { Router } from '@angular/router';@Component({selector: 'app-my-component',template: `<button (click)="navigateToAbout()">Go to About</button>`
})
export class MyComponent {constructor(private router: Router) {}navigateToAbout() {this.router.navigate(['/about']);}
}
2.2.3 路由守卫导航

使用路由守卫在导航前进行检查和处理,例如身份验证和权限控制。

// Vue Router
const router = createRouter({history: createWebHistory(),routes
});router.beforeEach((to, from, next) => {if (to.path === '/protected' && !isAuthenticated()) {next('/login');} else {next();}
});// Angular Router
const routes: Routes = [{ path: 'protected', component: ProtectedComponent, canActivate: [AuthGuard] }
];@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {constructor(private authService: AuthService, private router: Router) {}canActivate(): boolean {if (this.authService.isAuthenticated()) {return true;} else {this.router.navigate(['/login']);return false;}}
}

3. 路由与导航的协同工作

3.1 URL与视图同步

路由系统通过监听URL的变化来加载相应的组件或视图。前端导航通过修改URL来触发路由的变化,从而实现页面的切换。

3.2 状态管理

路由和导航通常与状态管理库(如Redux、Vuex、NgRx)结合使用,管理和同步应用状态。

3.3 异步数据加载

在导航到新页面时,可以通过路由钩子或生命周期方法异步加载所需数据,提高用户体验。

// Vue Router
const routes = [{path: '/user/:id',component: UserComponent,beforeEnter: (to, from, next) => {store.dispatch('fetchUserData', to.params.id).then(() => next());}}
];

4. 性能优化

4.1 路由懒加载

通过懒加载方式按需加载路由对应的组件,减少初始加载时间。

// React Router
const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));// Vue Router
const routes = [{ path: '/', component: () => import('./views/Home.vue') },{ path: '/about', component: () => import('./views/About.vue') }
];// Angular Router
const routes: Routes = [{ path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },{ path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }
];

4.2 优化导航体验

使用框架提供的过渡效果和进度指示器优化导航体验。

// Vue Router 过渡效果
<template><router-view v-slot="{ Component }"><transition name="fade" mode="out-in"><component :is="Component" /></transition></router-view>
</template><script>
export default {name: 'App'
};
</script><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active in <2.1.8 */ {opacity: 0;
}
</style>

5. 结论

路由和前端导航是现代单页应用(SPA)中至关重要的组成部分,通过合理的路由配置和导航方式,可以提高应用的可维护性、用户体验和性能。不同的前端框架提供了丰富的路由和导航功能,开发者可以根据项目需求选择合适的实现方式和优化策略。


⭐ 写在最后

本专栏适用读者比较广泛,适用于前端初学者;或者没有学过前端对前端有兴趣的伙伴,亦或者是后端同学想在面试过程中能够更好的展示自己拓展一些前端小知识点,所以如果你具备了前端的基础跟着本专栏学习,也是可以很大程度帮助你查漏补缺,由于博主本人是自己再做内容输出,如果文中出现有瑕疵的地方各位可以通过主页的左侧联系我,我们一起进步,与此同时也推荐大家几份专栏,有兴趣的伙伴可以订阅一下:除了下方的专栏外大家也可以到我的主页能看到其他的专栏;

前端小游戏(免费)这份专栏将带你进入一个充满创意和乐趣的世界,通过利用HTML、CSS和JavaScript的基础知识,我们将一起搭建各种有趣的页面小游戏。无论你是初学者还是有一些前端开发经验,这个专栏都适合你。我们会从最基础的知识开始,循序渐进地引导你掌握构建页面游戏所需的技能。通过实际案例和练习,你将学会如何运用HTML来构建页面结构,使用CSS来美化游戏界面,并利用JavaScript为游戏添加交互和动态效果。在这个专栏中,我们将涵盖各种类型的小游戏,包括迷宫游戏、打砖块、贪吃蛇、扫雷、计算器、飞机大战、井字游戏、拼图、迷宫等等。每个项目都会以简洁明了的步骤指导你完成搭建过程,并提供详细解释和代码示例。同时,我们也会分享一些优化技巧和最佳实践,帮助你提升页面性能和用户体验。无论你是想寻找一个有趣的项目来锻炼自己的前端技能,还是对页面游戏开发感兴趣,前端小游戏专栏都会成为你的最佳选择。点击订阅前端小游戏专栏

在这里插入图片描述

Vue3通透教程【从零到一】(付费) 欢迎来到Vue3通透教程!这个专栏旨在为大家提供全面的Vue3相关技术知识。如果你有一些Vue2经验,这个专栏都能帮助你掌握Vue3的核心概念和使用方法。我们将从零开始,循序渐进地引导你构建一个完整的Vue应用程序。通过实际案例和练习,你将学会如何使用Vue3的模板语法、组件化开发、状态管理、路由等功能。我们还会介绍一些高级特性,如Composition API和Teleport等,帮助你更好地理解和应用Vue3的新特性。在这个专栏中,我们将以简洁明了的步骤指导你完成每个项目,并提供详细解释和示例代码。同时,我们也会分享一些Vue3开发中常见的问题和解决方案,帮助你克服困难并提升开发效率。无论你是想深入学习Vue3或者需要一个全面的指南来构建前端项目,Vue3通透教程专栏都会成为你不可或缺的资源。点击订阅Vue3通透教程【从零到一】专栏

在这里插入图片描述

TypeScript入门指南(免费) 是一个旨在帮助大家快速入门并掌握TypeScript相关技术的专栏。通过简洁明了的语言和丰富的示例代码,我们将深入讲解TypeScript的基本概念、语法和特性。无论您是初学者还是有一定经验的开发者,都能在这里找到适合自己的学习路径。从类型注解、接口、类等核心特性到模块化开发、工具配置以及与常见前端框架的集成,我们将全面覆盖各个方面。通过阅读本专栏,您将能够提升JavaScript代码的可靠性和可维护性,并为自己的项目提供更好的代码质量和开发效率。让我们一起踏上这个精彩而富有挑战性的TypeScript之旅吧!点击订阅TypeScript入门指南专栏

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态大模型:基础架构

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则…

gitee添加别人的仓库后,在该仓库里添加文件夹/文件

一、在指定分支里添加文件夹&#xff08;如果库主没有创建分支&#xff0c;自己还要先创建分支&#xff09; eg:以在一个项目里添加视图文件为例&#xff0c;用Echarts分支在usr/views目录下添加Echarts文件夹&#xff0c;usr/views/Echarts目录下添加index.vue 1.切换为本地仓…

Linux系统安装Ruby语言

Ruby是一种面向对象的脚本语言&#xff0c;由日本的计算机科学家松本行弘设计并开发&#xff0c;Ruby的设计哲学强调程序员的幸福感&#xff0c;致力于简化编程的复杂性&#xff0c;并提供一种既强大又易于使用的工具。其语法简洁优雅&#xff0c;易于阅读和书写&#xff0c;使…

重学java 66.IO流 转换流

且敬我疯狂&#xff0c;生命中不败的篇章 —— 24.6.11 一、字符编码 计算机中储存的信息都是用二进制数表示的&#xff0c;而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。[按照某种规则&#xff0c;将字符存储到计算机中&#xff0c;称为编…

打造一个属于你的桌面天气 超级有个性的天气桌面

打造一个属于你的桌面天气 超级有个性的天气桌面。大家好&#xff0c;今天我们带来一个非常有趣的桌面天气工具&#xff0c;喜欢桌面diy的你&#xff0c;快点用上它吧&#xff01; 桌面上的美化&#xff0c;是许多爱美用户的心血和热爱。每个地方的美化&#xff0c;都是自己亲…

机器学习课程复习——隐马尔可夫

不考计算题 Q:概率图有几种结构? 条件独立性的公式? 顺序结构发散结构汇总结构Q:隐马尔可夫模型理解? 概念 集合:状态集合、观测集合 序列:状态序列、观测序列

linux环境编程基础学习

Shell编程&#xff1a; 相对的chmod -x xx.sh可以移除权限 想获取变量的值要掏点dollar&#xff08;&#xff04;&#xff09; 多位的话要加个花括号 运算&#xff1a;expr 运算时左右两边必须要加空格 *号多个含义必须加转义符 双引号可以加反单&#xff0c;但是发过来就不行 …

【android】安卓入门学习

文档介绍&#xff1a;http://8.136.122.222/book/primary/kotlin/kotlin-intro.html 文档补充说明&#xff1a;https://blog.csdn.net/qq_42059717/category_12047508.html 一、搭建环境及工具安装 见文档 二、工具界面及项目文件介绍 ├── app //工程主模块名称 │ …

【Linux安装Conda环境的详细教程】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

PTP简介及Linux phy ptp驱动实现

1、PTP简介 PTP(precision time protocol)精确时间协议&#xff0c;是一种时间同步的协议&#xff0c;对应 IEEE 1588 标准&#xff0c;是基于网络数据包的一种时间同步协议&#xff0c;1588v2的同步精度可以达到ns级&#xff0c;但1588协议对硬件有依赖。 2、PTP原理 时间同…

DFS(一)

问题一(指数级选择) 从1~n这n个整数中任意选取多个&#xff0c;输出所有可能的选择方案。 首先想一下&#xff0c;在现实世界中&#xff0c;我们要如何解决这个问题。 应该是一个一个枚举&#xff0c;即每个数都可以有两个选择(选/不选)。共有种结果。 想一下&#xff0c;如…

PHP转Go系列 | 字符串的使用姿势

大家好&#xff0c;我是码农先森。 输出 在 PHP 语言中的输出比较简单&#xff0c;直接使用 echo 就可以。此外&#xff0c;在 PHP 中还有一个格式化输出函数 sprintf 可以用占位符替换字符串。 <?phpecho 码农先森; echo sprintf(码农:%s, 先森);在 Go 语言中调用它的输…

创建进程的常用方式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中有多个模块可以创建进程&#xff0c;比较常用的有os.fork()函数、multiprocessing模块和Pool进程池。由于os.fork()函数只适用于Unix/Linu…

0617,递归问题(详细——好好好一入递归深似海)

目录 第七章&#xff08;函数&#xff09;思维导图总结&#xff1a;递归三问 01&#xff0c;电影院问题 理解递归的执行过程 02&#xff0c;FIBNACCI数列 不是说具有递归结构的问题&#xff0c;就可以用递归求解——存在大量的重复计算 法一&#xff1a;自顶向下求解 BUG…

ruoyi框架第二天,自定义接口,在若依框架显示数据

书接上文&#xff0c;搭建好若依&#xff0c;并且创建自己想要的模块。 让ruoyi框架显示自己想要的模块。 今天&#xff0c;我们就要自定义接口&#xff0c;模仿ruoyi框架收发数据模式&#xff0c;来创建自己的模块。 我们创建好自己想要的接口&#xff0c;我这个是无参的查…

【Java】已解决java.util.EmptyStackException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.util.EmptyStackException异常 一、问题背景 java.util.EmptyStackException是Java在使用java.util.Stack类时可能会遇到的一个异常。这个异常通常在尝试从空的栈中弹出&am…

四连杆机构运动学仿真 | Matlab源码+理论文本【超详细】

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学详细的公式推导文档&#xff0c;从而帮助大家更好…

2024年化学、能源与核工程国际会议(ICCENE 2024)

2024年化学、能源与核工程国际会议(ICCENE 2024) 2024 International Conference on Chemical, Energy and Nuclear Engineering (ICCENE 2024) 会议地点&#xff1a;三亚&#xff0c;中国 网址&#xff1a;www.iccene.com 邮箱: iccenesub-conf.com 投稿主题请注明:ICCEN…

【面试题】Spring常见面试题整理2024(全是干货!!!)

备战实习&#xff0c;会定期给大家整理常考的面试题&#xff0c;大家一起加油&#xff01; &#x1f3af; 注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 【面试题】MySQL常见面试题总结【面试题】面试题分享之JVM篇【面试题…

信息学奥赛初赛天天练-29-CSP-J2022阅读程序-掌握递归、递推、动态规划、二分与极值函数应用

PDF文档公众号回复关键字:20240619 2022 CSP-J 阅读程序2 阅读程序(判断题1.5分 选择题3分 共计40分 ) 01 #include <algorithm> 02 #include <iostream> 03 #include <limits> 04 05 using namespace std; 06 07 const int MAXN 105; 08 const int MAX…