前端框架中的路由(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.rhkb.cn/news/354407.html

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

相关文章

13.3 Go 性能优化

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

LENOVO联想 小新 16 IAH8 2023款(83BG)笔记本原厂Windows11系统,恢复出厂开箱状态预装OEM系统镜像安装包下载

适用型号&#xff1a;小新 16 IAH8【83BG】 链接&#xff1a;https://pan.baidu.com/s/18VbGbBXtQEW5P8wLIyJtAQ?pwddv1s 提取码&#xff1a;dv1s 联想原装Win11系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家…

Java | Leetcode Java题解之第168题Excel表列名称

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToTitle(int columnNumber) {StringBuffer sb new StringBuffer();while (columnNumber ! 0) {columnNumber--;sb.append((char)(columnNumber % 26 A));columnNumber / 26;}return sb.reverse().t…

读AI新生:破解人机共存密码笔记06人工智能生态系统

1. 深蓝 1.1. “深蓝”的胜利虽然令人印象深刻&#xff0c;但它只是延续了几十年来显而易见的趋势 1.2. 国际象棋算法的基本设计是由克劳德香农在1950年提出的 1.2.1. 这一基本设计在20世纪60年代初实现了重大改进 1.2.2. 最优秀的国际象棋程序的等级评分稳步提高&#xff…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch 简介基本概念ElasticSearch概念-倒排索引安装基本命令ik 分词器SpringBoot整合测试存储数据&#xff1a;测试复杂检索同步与异步调用 参考 简介 Elasticsearch 是一…

C++ | Leetcode C++题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …

差分数组汇总

本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0i​vDiff[i] 如果 vDiff[i1]&#xff0c;则a[i1…]全部 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 &#xff0c;则&#xff1a; { a [ i ] 不变&…

码住!详解时序数据库不同分类与性能对比

加速发展中的时序数据库&#xff0c;基于不同架构&#xff0c;最流行的类别是&#xff1f; 作为管理工业场景时序数据的新兴数据库品类&#xff0c;时序数据库凭借着对海量时序数据的高效存储、高可扩展性、时序分析计算等特性&#xff0c;一跃成为物联网时代工业领域颇受欢迎的…

RK3568技术笔记十二 Android编译方法

Android源码说明 Android源码在SAIL-RK3568开发板光盘->Android->源代码中&#xff0c;由于android源码太大&#xff0c;在进行压缩时&#xff0c;进行分包压缩&#xff0c;因此有4部分&#xff0c;如图所示&#xff1a; 进行解压时&#xff0c;需将4部分压缩包放置同一…

技术差异,应用场景;虚拟机可以当作云服务器吗

虚拟机和云服务器是现在市面上常见的两种计算资源提供方式&#xff0c;很多人把这两者看成可以相互转换或者替代的物品&#xff0c;实则不然&#xff0c;这两种资源提供方式有许多相似之处&#xff0c;但是也有不少区别&#xff0c;一篇文章教你识别两者的技术差异&#xff0c;…

快速搭建Jenkins自动化集成cicd工具

一、简介 jenkins是一款优秀的自动化持续集成运维工具&#xff0c;可以极大的简化运维部署的步骤。 传统的项目部署需要手动更换最新的项目代码&#xff0c;然后打包并运行到服务器上。 使用Jenkins可以自动化实现&#xff0c;当代码编写完成并提交到git后&#xff0c;Jenki…

【前端项目笔记】3 用户管理

用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中&#xff08;激活&#xff09;子菜单后刷新不显示高亮 给二级菜单绑定单击事件&#xff0c;点击链接时把对应的地址保存到sessionSto…

使用高德API计算两个地址的距离

要使用高德地图API来计算两个城市之间的距离&#xff0c;你需要首先在高德开放平台上注册并获取API密钥&#xff08;AK&#xff09;。以下是一个使用Java调用高德地图API来计算两个城市之间距离的示例代码。 步骤 1: 获取高德地图API密钥 访问高德开放平台&#xff08;https:…

FreeRTOS源码分析

目录 1、FreeRTOS目录结构 2、核心文件 3、移植时涉及的文件 4、头文件相关 4.1 头文件目录 4.2 头文件 5、内存管理 6、入口函数 7、数据类型和编程规范 7.1 数据类型 7.2 变量名 7.3 函数名 7.4 宏的名 1、FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工…

【odoo | JSON-RPC】无会话(session_id)控制的api,外部api密钥的另一种表现!

概要 在Odoo中&#xff0c;JSON-RPC&#xff08;JSON Remote Procedure Call&#xff09;是一种基于JSON格式的远程过程调用协议&#xff0c;用于客户端和服务器之间的通信。此文章将介绍 JSON-RPC中无会话(session_id)控制的api&#xff0c;也是外部api密钥的另一种表现方式。…

百度文心智能体平台(想象即现实):轻松上手,开启智能新时代!创建属于自己的智能体应用。

目录 1.1、文心智能体平台 1.2、创建智能体 1.3、智能体报名入口 1.4、古诗词小助手 1.5、访问我的智能体 在这个全新的时代里&#xff0c;人工智能技术正以前所未有的速度发展&#xff0c;渗透到我们生活的方方面面。无论是智能家居、自动驾驶&#xff0c;还是医疗诊断、…

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧

单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中&#xff0c;用于控制各类电子设备。UART和USART是单片机中常见的通信接口&#xff0c;负责串行数据传输。下面我们详细介绍它们在单…

【LeetCode:394. 字符串解码 + 栈 | 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Sqlite3数据库基本使用

一、基本概念 数据&#xff1a;能够输入计算机并能被计算机程序识别和处理的信息集合 数据库&#xff1a;长期存储在计算机内、有组织的、可共享的大量数据的集合 DBMS&#xff1a;位于用户与操作系统之间的一层数据管理软件&#xff0c;用于操纵和管理数据库 二、安装 在线…

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89402192 更多资源下载&#xff1a;关注我。