原文:点击打开
翻译:碎碎酱

这篇文章是由Nilson JacquesChris PerryThomas Greco共同审查的,感谢所有的SitePoint的评审人严把质量关,使得SitePoint的内容质量一直保持最好。

在SitePoint论坛中,我在如此多的框架名称中晕头转向,困惑于如此多的选择,我问道:哪个JavaScript框架更适合用于创建动态应用。鉴于我在行业中观望到的实际应用,我说道:React早已在前端大战中胜出了,这句充满争议的话需要一点更多的解释,如下所述。

React不仅仅是一个新生框架,同时也代表着一种统一的规范。它可以为web应用提供基础技术,并且它的热度使我们有信心它不会马上就被替代。我们来看一下React在当前MVC框架大军中所占据的位置,探索它的优势,并在结尾做一个对未来JavaScript前沿技术的预测。

客户端MVC

在过去的几年来,很多聪明的人试图创造一个用于创建单页web应用的完美框架 — 应用通过JavaScript渲染,视图随着用户输入、数据改变而立刻更新,使人感觉到极高的性能提升。Guillermo Rauch的文章《7 Principles of Rich Web Applications》是它为什么如此重要的原因之一,以及我们在构建它们时应该考虑的问题。

你可以找到这些类型的TodoMVC应用的示例,顾名思义,它们包含传统意义上的模型、视图和控制器。

后来,React低调出场。

React第一次被宣布的时候看起来有点奇怪,它仅仅关注View层,而且并没有包含模型和控制器,代码示例是使用一个奇怪的叫做JSX的语法写的,它看起来好像倒退了一大步回到了很多年以前,因为它将HTML和JavaScript代码混合在了一起。

它没有任何信息教你如何组织你的应用的结构,此外,它包含一个组件层次结构的概念 — UI是由组件块构成的,并且在组件状态改变时被重新渲染,React以一种明显的与流行的方案相违背的姿态出现在了世人面前,宣布双向绑定和模板都是很糟糕的创意。

被广泛接受的认知

React迅速得到了大量的评论,在那些日子里,很难找到不讨论React的与JavaScript相关的邮件列表、会议或者聚会。所有我所在的这座城市的本地开发团队都开始尝试React,相反,其它的流行框架也赞同它的思想 — 单向数据流,每一个曾经听过我介绍的人都夸赞它的单向数据流、组件模块结构和简单直接的渲染,使我们的任务更加简单而且代码更加可预测。

React被人们接受使我十分惊讶,因为当今的JavaScript场面如此混乱,我们很少如此一致的赞同一个事物。这里仅有一小群人是衷心于一个框架,大多数的我们都是不断的从一个框架跳到另一个框架,因为某些内容十分复杂并出现各种BUG,一路上充满沮丧。我还没有听说过有人因为尝试React充满挫败感而远离它,自从jQuery在前端胜出后还从没有出现过这种情况。

你在React中只需要做一件事情,一件事情!

它仅仅关注View层,这意味着它仅关注很少的内容,而不是像其它框架那样固执的尝试解决所有问题。它那极少的API意味着不需要耗费太多精力来学习,并且它的文档仅有寥寥数页。这对于学习的人有极大的帮助,并且使得升级、维护同样简单,你不需要在头脑中掌握大量的认知。React选择使用简单的JavaScript语法构建,而不是选择自定义API或者模版语言。

这个设计也是很吸引JavaScript开发者的,尤其那些似乎更喜欢类似UnderscoreMoment这种仅关注于一件事情、非常符合Unix哲学的库的开发者。只做好一件事打开了一扇大门,使人们可以自由构建自己感兴趣的React零件。这使得类似React RouterReduxCSS Modules这些模块开始兴起。

React的组件十分简单

组件仅负责UI中很小的、独立的一小部分,它们接收数据并且在每个时刻被一致的渲染,前端开发者、后端开发者和设计师可以很容易的理解组件并为组件贡献代码,因为它看起来就像HTML,极小的API设计意味着你可以在一天内了解所有关于组件的知识,并且立刻就开始贡献代码。

服务端渲染

React很容易实现服务端渲染,因为组件可以认为是接收数据并返回HTML的函数,这个设计使得它非常容易在任何服务端编程语言和框架中渲染。

在前段时间,客户端MVC伴随着路由绑定、长久的页面加载时间破坏了web世界,我们同样因为使用JavaScript来渲染全部事物而破坏了搜索引擎爬虫的工作,从这些失误中我们吸取了教训,再一次认真的明确了这几个web的核心 — URLs、服务器端渲染和快速加载时间,React在这些其它框架曾经努力过的事情上充满亮点。

混乱的更新DOM

Backbone对于JavaScript有着里程碑般的重大意义,是它第一次清楚的将MVC带到客户端,它给我们展示了一种组织应用的新方式,它是最早之一在文档中提到在DOM维持自身状态是一个不好的创意,DOM的代码很快就会使你的app变得更脆弱,它使得你不知道哪部分代码修改了哪部分元素。Backbone鼓励这样一个想法,视图总是基于当前的现实状态渲染,React利用它的单向数据流实现了同样的想法。

React组件没有定义状态间的转换,反而明确的基于当前状态进行渲染,完全消除了手动修改DOM的任务,它保证了真实DOM的唯一数据流。

不可否认的,这使得类似动画这种任务变得很困难。那些情况下,你需要定义状态的转换,虽然大多数情况下你仅需简单的考虑组件最终的状态来决定如何渲染组件。

未来

React将会变得越来越流行,我们将会看到更多的支持工具和项目作为React成熟的生态系统的一部分,但是这些核心思想不会改变:单向数据流、组件分层、明确渲染和虚拟DOM。

React Native已经像我们展示了,一个好的View层如何同样很好的工作于其它类型UI中,行业中正在试图转变视图绑定这一模式,并且要不了多久就会出现了。

总之,React已经赢了并且它的前途是光明的。

有想法?

你是否同意React的原则?或者你会想出一个更好的想法?你开始使用React了吗?你有没有想到更多?请写下你的想法。