课程介绍
本次课程主要结合前端的发展史,讲下前端路由整体的发展史,了解路由扮演的角色,以及演变的必要性。同时结合React-router这个常用的类库的源码,分析下路由如何驱动我们的视图变化。以及结合路由,在大型复杂应用里,我们可以做什么样的优化,提升我们的开发体验和用户体验
笔记
路由的演变
路由是指根据不同的请求路径,返回不同的响应内容的机制。在传统的网页开发中,路由是由服务器端来实现的,每次请求都会导致页面的刷新。随着前端技术的发展,出现了单页面应用(SPA)的概念,即只有一个HTML文件,所有的内容都是由前端动态渲染的。这样就需要前端来实现路由的功能,即前端路由。
前后端路由
前端路由和后端路由的区别在于,前端路由是在浏览器中完成的,不需要向服务器发送请求,而后端路由是在服务器中完成的,需要向服务器发送请求。前端路由的优点是可以提高用户体验,减少网络开销,缺点是需要额外的代码来管理路由状态,而且对SEO不友好。后端路由的优点是可以实现更复杂的逻辑,对SEO友好,缺点是会增加网络开销,降低用户体验。
SPA&路由
SPA是指单页面应用,即只有一个HTML文件,所有的内容都是由前端动态渲染的。SPA的优点是可以实现流畅的用户交互,减少服务器压力,缺点是首屏加载时间较长,对SEO不友好。为了实现SPA,就需要使用前端路由来控制页面的切换。常见的前端路由有两种实现方式:hash模式和history模式。
hash模式是指利用URL中的hash(#)来记录路由状态,例如example.com/#/home 表示当前路由为home。hash模式的优点是兼容性好,不需要服务器配置,缺点是URL不美观,不能使用浏览器自带的前进后退功能。
history模式是指利用HTML5中的history API来记录路由状态,例如example.com/home 表示当前路由为home。history模式的优点是URL美观,可以使用浏览器自带的前进后退功能,缺点是需要服务器配置,不兼容老旧浏览器。
react-router实现原理
react-router是React生态中最流行的前端路由库,它提供了一系列组件和API来实现前端路由的功能。react-router有两个核心概念:Router和Route。
Router是指负责监听URL变化,并将其转换为location对象(包含pathname、search、hash等属性)的组件。Router有两种类型:BrowserRouter和HashRouter,分别对应history模式和hash模式。
Route是指根据location对象匹配相应路径,并渲染相应组件或者执行相应函数的组件。Route有三种属性:path、component和render。path是指要匹配的路径,可以是字符串或者正则表达式;component是指要渲染的组件;render是指要执行的函数。
react-router还提供了一些其他组件和API来辅助实现前端路由的功能,例如Link、NavLink、Switch、Redirect、withRouter等。
项目中常见的问题与结合路由的最佳实践
在使用react-router进行项目开发时,可能会遇到一些常见的问题和挑战,例如:
- 如何实现动态路由?即根据参数或者条件来渲染不同的组件或者执行不同的逻辑。
- 如何实现嵌套路由?即在一个页面中嵌入另一个页面,并且保持URL和组件之间的对应关系。