余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

狗屎一样的React(第七节,前端路由这个玩意)

xiyangw 2022-12-06 09:35 16 浏览 0 评论

本来这一节是想按着顺序,从前面的react首页结束,开始说React-router这一节的,但我觉得很又必要大概说一下,我们为什么要使用前端路由,关于前端路由我们所能想到的一些知识点。

1、先说说后端路由

狗屎一样的React(第七节,前端路由这个玩意)

说起前端路由,我们肯定会想到后端路由,我们以前经常看见访问一个网址,大概路径是这个样子的,比如:

www.xx.com/index

www.xx.com/index.do

www.xx.com/index.action

www.xx.com/index.jsp

www.xx.com/index.html

等等这些,其实都大概可以看出后端路由的影子,这些平台或者网站,你几乎每添加一个展示页面,都需要后台代码的支撑,或者需要后台架构某些配置项的支撑,否则你添加的页面是无法展示到客户眼前的。

而且既然是后台路由,那么我们展示的每个url路径肯定是受后台控制的,言外之意就是我们本来要访问index.html,但当用户输入www.xx.com/index.html的时候,后台是可以做拦截处理的,后台甚至可以把路径进行重定向,结果给我们展示了list.html;所以只有后台给我们拦截以后再放开这个拦截,前端的页面才得以展示;这样我们就可以得出,几乎每个页面的展示都要受网速的限制,受我们后台架构是否足够优化的限制,我们大多数页面都需要用ajax来获取数据来进行展示,但当我们点击浏览器的回退按钮的时候,经常会出现这样一个bug,前一个页面的ajax数据就不见了,不得不重新获取,而且网页回退,你会发现你的js逻辑会重新走一遍,但如果前一个页面因为我们用js逻辑修改过html内容,html是不会重新渲染的。说得更直白点就是,比如我们有一个div,我们用js给他动态添加了一个自定义属性aname="1" ,当点击回退按钮的时候,aname=“1”还在,html内容不会重新渲染。

2、前端路由又有哪些好处?

刚才我们说了后端路由,其实后端路由有点原始,甚至是好几年前的前后台不分工的情况下很常用的,那个时候天还是蓝的没有什么雾霾,苹果也是用来吃的,人们对页面要求度也是不高的,更多的是关注后台逻辑功能,慢慢的互联网行业起来了,人们发现前台页面是否友好,效果是否绚烂,色觉是否舒服,交互是否顺畅,流程是否简约,加载速度是否够快,都在一定程度上决定着你这个网站在用户心中的分值。

那么前端路由给我们带来什么好处呢?

(1) 有了前端路由,其实更利于我们做前后端分离开发,后端写他们自己的后台逻辑,给我们提供一些跨域的接口,或者是我们本地模拟跨域,后台先给我们准备一些测试数据,这样将更有利于我们前端开发;以前开发前端,总是等待后台给添加数据,这样无形中造成了时间成本;等项目开发完成,前端代码可以部署在独自一台服务器下,也可以再和后台代码进行整合,部署在同一台服务器下;

(2)前端路由就是前端控制跳转,这个页面的展示速度不再受后台控制,甚至比我们刚学html的时候,通过a标签的href跳转更快;

(3)前端路由虽然表现的和后端路由也比较相似,但很多时候通过前端路由我们可以做模块化思路开发,让思路变得更清晰,而且使用了react以后你会慢慢发现,我们甚至可以多个人协同完成同一个页面的内容,因为我们可以每人完成一个小组件;

(4)前端路由形式也很多,现在比较提倡app单页开发,所以前端路由用于单页开发以后,你会发现点击浏览器回退按钮后,之前的ajax获取的数据仍然是存在的,为我们节省了前后台数据交互

其实好处那么多,我更看中第一条,前端可以脱离开后台架构的路由控制

3、前端路由有哪些形式?

前端路由形式也很多,这些都是架构决定的,换言之就是写前端框架的人的思路。我们很多时候总会羡慕别人发家致富,很多时候我们也惊奇的发现别人起家的思路我们也曾有过,所以不管在哪个时代,有思路的人值得我们羡慕,将思路可以很好的运用的人更值得我们崇拜。

(1) 之前用过jquery-mobile的时候,其实整个APP会在一个大htm里来开发,每个小页面在一个小div里进行开发,当前需要展示那个div,就把其他div都隐藏,把当前这个div进行展示。因为大部分数据是需要后台获取的,所以加载页面的时候页面里可能更多的是一些空的dom元素,这样也不会太影响页面的加载速度;当我们点击切换到其他页面的时候再进行数据获取;当我们再切换到其他页面的时候,这个页面的数据已经被缓存,达到了一个很好的单页面APP的效果。

这种思路,首页路径展示为www.xx.com/index.html,列表页(其实也就是列表那个div)路径展示为www.xx.com/index.html#list,其实列表页的那个div的id就是list,对应着的详情页路径展示为www.xx.com/index.html#detail,所以详情页的对应div的id页应该是detail

(2)react-router 同样也是单页面开发的前端路由,只不过时代进步了,他更多的体现出了模块化区分开发的思路。每个页面就不是一个div了,而且采用es6的模块化,每个所谓的页面变成了独立的模块,后续我们会说到react-router使用后,每个页面的展示思路;

(3) 接触过angularjs的小伙伴们会发现,前端路由可以指配html页面,根据angular前端路由来控制哪个路径下应该由哪个html的内容渲染到我们的主页面上;

其实说了那么多,小伙伴们可能觉得很麻烦,我还不如准备好多html,自己来控制a标签的href跳转呢。这就看你的项目更适合哪种情况,你杀死了敌人,不会有首长因为你使用的是菜刀而不是大炮而批评你的,大炮虽然更先进,但需要花时间去学习如何使用,会消耗炮弹,需要运送费用等等,所以我们的开发中,没有最适合,只有更合适。

4、绝对路径的base标签

既然说到前后断分离开发,那么就会有一个绝对路径和相对路径的问题。以前做jsp项目开发的时候,大部分时候使用的绝对路径,后来做分离开发使用的是相对路径,但上线要和后台代码部署到同一个tomcat下,结果我的相对路径就出了问题,很不好改。html中有base这个标签,base标签会有href属性,这个是页面的基准路径。举个栗子,比如我们给页面设定 base href="www.xx.com/" ,然后页面引入css的时候 link rel="stylesheet" href="style/demo.css" ,其实最终你的这个demo.css展示的路径就是www.xx.com/style.demo.css了,是不是很好用呢。

相信随着时间和技术的发展,前端路由以后一定会出现更多种形式,而且react-router的各个版本使用姿势都不一样。我们期待着以后的架构将会学习成本越来越低,功能越来越强悍,我们也期待着自己懂得越来越多,但事情往往事与愿违,我们总是需要不断得跟随着先行者们去学习。前端框架不断得出现,先行者们不断得发大招,我们不经意间就被秒杀得体无完肤,但却也是更多得无奈,还是得勇敢得站起来,去学习,去进取以避免被快速得技术发展所淘汰。我还是希望能给更多得小伙伴带来一些易学易懂得东西,喜欢得小伙伴请关注下一节:狗屎一样的React(第八节,React-router 4.0的使用姿势)

相关推荐

前后端分离 Vue + NodeJS(Koa) + MongoDB实践

作者:前端藏经阁转发链接:https://www.yuque.com/xwifrr/gr8qaw/vr51p4写在前面闲来无事,试了一下Koa,第一次搞感觉还不错,这个项目比较基础但还是比较完整了,...

MongoDB 集群如何工作?

一、什么是“MongoDB”?“MongoDB”是一个开源文档数据库,也是领先的“NoSQL”数据库,分别用“C++”“编程语言”编写,使用带有“Schema”的各种类似JSON的文档,是也分别被认为...

三部搭建mongo,和mongo UI界面

三步搭建mongo,和mongoUI界面安装首先你需要先有一个docker的环境检查你的到docker版本docker--versionDockerversion18.03.1-ce,b...

Mongodb 高可用落地方案

此落地方案,用于实现高可用。复制集这里部署相关的复制集,用于实现MongoDB的高可用。介绍MongoDB复制集用于提供相关的数据副本,当发生硬件或者服务中断的时候,将会从副本中恢复数据,并进行自动...

一次线上事故,我顿悟了MongoDB的精髓

大家好,我是哪吒,最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦?让我们一起,一探究竟,继续学习MongoDB分片的理论与实践,...

IDEA中安装MongoDB插件-再也无要nosql manager for mongodb

大家都知道MongoDB数据库作为典型的非关系型数据库被广泛使用,但基于MongoDB的可视化管理工具-nosqlmanagerformongodb也被用的较多,但此软件收费,所以国内的破解一般...

数据库监控软件Lepus安装部署详解

Lepus安装部署一、软件介绍Lepus是一套开源的数据库监控平台,目前已经支持MySQL、Oracle、SQLServer、MongoDB、Redis等数据库的基本监控和告警(MySQL已经支持复...

YAPI:从0搭建API文档管理工具

背景最近在找一款API文档管理工具,之前有用过Swagger、APIManager、Confluence,现在用的还是Confluence。我个人一直不喜欢用Swagger,感觉“代码即文档”,让代...

Mac安装使用MongoDB

下载MongoDB包:https://www.mongodb.com/download-center解压mongodb包手动解压到/usr/local/mongodb文件夹配置Mac环境变量打开环境...

保证数据安全,不可不知道的MongoDB备份与恢复

大家在项目中如果使用MongoDB作为NOsql数据库进行存储,那一定涉及到数据的备份与恢复,下面给大家介绍下:MongoDB数据备份方法在MongoDB中我们使用mongodump命令来备...

MongoDB数据备份、还原脚本和定时任务脚本

备注:mongodump和mongorestore命令需要在MongoDB的安装目录bin下备份脚本备份格式/usr/local/mongodb/bin/mongodump -h ...

等保2.0测评:mongoDB数据库

一、MongoDB介绍MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产...

MongoDB入门实操《一》

什么是MongoDBMongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之...

Python安装PyMongo的方法详细介绍

欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。前言本文主要给大家介绍的是关于安装PyMongo的...

第四篇:linux系统中mongodb的配置

建议使用普通用户进行以下操作。1、切换到普通用户odysee。2、准备mongodb安装包,自行去官网下载。3、解压安装包并重命名为mongodb4.04、配置mongodbcdmongod...

取消回复欢迎 发表评论: