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

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

1、先说说后端路由

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

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的使用姿势)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,384评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 不知从什么时候起 叶婷和李旭的关系变得很好 是始于一次社团活动? 还是一次课堂表演? 已经记不清了 空闲时 两人约...
    王小金Vincent阅读 360评论 1 0
  • 六月十八日晚间十点四十五分,我走出北京火车站,门前横陈的一条大马路,是被车流堵塞的。第二日的清早,我从东直门前往地...
    野孤蝉阅读 617评论 0 5