⭐⭐React三大特点

223 阅读4分钟

前言

React 自从 2013 年开源以来,凭借先进的理念、简洁的 API 和优秀的性能迅速发展起来。如今已经构建起一个完整庞大的生态圈。从 NPM Trend 的统计结果来看,React 显著领先于vuejs、angular等前端框架:

image.png 图中的数据是过去两年三个框架在npm下载量的统计结果,蓝色线是react,橙色是vue,绿色是angular。这三个框架的全球下载量差距非常明显,从全球范围来看react的下载量明显要比其他两个框架高出几倍。不过就国内市场而言,react和vue的体量相差就没这么明显了,甚至vuejs还略有胜算。

不过这都不重要,重要的是,什么原因,让react从原本只是facebook内部开发工具,一跃成为成为全世界最受欢迎、最最流行的框架呢? 这就不得不提到react的设计理念了。

react的成功基于3个独特的设计理念:zhuanlan.zhihu.com/p/28562066

  1. 单向数据流
  2. 虚拟 DOM
  3. 组件化

单向数据流

在 React 问世之前,人们就已经认识到数据与界面绑定在一起的重要性,通过数据的变化来动态改变页面的显示,这种方式可以极大的减轻前端开发的压力。为了解决 UI 和数据同步复杂性的问题,第一代angularjs引入了双向数据绑定的概念,数据的变化会改变ui,但是操作ui也同样可以影响数据。双向绑定在简化了代码的同时,也带来了灾难性的影响,页面的Controller控制器围绕着一个叫做scope的对象来组织和更新数据、创建方法、分发事件,于是整个angularjs的项目就变得越来越臃肿,数据也越来越不可控。最后,连angularjs自己都放弃了自己,另起炉灶改为使用单向数据流。

有了前车之鉴,reactjs的对于数据的处理就聪明很多了,在选择单项数据流的时候,也选择了另外一条完全不同的方向:单向渲染。这种方式简单易懂:React 就像是一个没有副作用的函数,忠实地根据输入的数据来构建符合预期的 UI。同时,React 也更像 JS 本身,而不是一种面向某个领域的方言。前端工程师只需要学习其少量的 API,可以借助之前积累的 JS 经验来优化开发效率。

虚拟 DOM

如果说单向渲染是 React 的内核思想,那么虚拟 DOM 就是能够让这个思想得以实现的关键性技术。这里不得不佩服 React 先驱们的聪明才智,他们大概从 Docker 或者 虚拟机vmware 的Snapshot快照技术中得到了一些灵感,在 JS 和 DOM 之间增加一个新的抽象ui层,在真实ui需要更新时,react会对比这两个ui层的差异,最终以最小的代价差量更新ui的元素

image.png

组件化

最后一个特点,组件化,就像是搭积木,每一块积木就是一个组件,是既独立又统一的。因为独立,所以它可以自由组合,也可以随意替换和删除其中一个组件,并不会影响整体。但是它又统一于整体,比如上面的积木都是六边形的,你不可能拿一个三角形放进去啊。

image.png

而组件化就是说,一个整体项目就是由无数个独立的组件搭建起来的。组件化的工作方式信奉独立、完整、自由组合。目标就是尽可能把设计与开发中的元素独立化,使它具备完整的局部功能,通过自由组合来构成整个产品。

组件化并不是react首创的,但却是由它发扬光大的,因为 1,有助于保持交互一致性;比如说,在一个项目里,选择日期应该是统一的交互方式,在整个产品中就应该只有一种存在形式。

小结

参考文档 React的前世今生_