Facebook发布用户界面库React,业界褒贬不一

Facebook开源了React,这是该公司用于构建反应式图形界面的JavaScript库,已经应用于构建Instagram网站及Facebook部分网站。最近出现了AngularJS、MeteorJS 和Polymer中实现的Model-Driven Views等框架,React也顺应了这种趋势。React基于在数据模型之上声明式指定用户界面的理念,用户界面会自动与底层数据保持同步。与前面提及的框架不同,出于灵活性考虑,React使用JavaScript来构建用户界面,没有选择HTML。

JSX是JavaScript的一种支持XML字面量的扩展,尽管React并不依赖JSX,但是React网站上的示例代码都依赖它。比如,下面是以React表示的很有代表性的“Hello World”程序,其中用到了JSX:

/** @jsx React.DOM */
var HelloMessage = React.createClass({
  render: function() {
    return <div>{'Hello ' + this.props.name}</div>;
  }
});

React.renderComponent(<HelloMessage name="World" />,
                      mountNode);

嵌入的XML会在预编译阶段被翻译为正常的JavaScript DOM API调用。

自从发布以来,React库受到了广泛的批评。批评大致可以分为两类,一类是说该库把视图和逻辑混了起来,另一类是说与现有框架相比它的代码冗长。下面我们分别来看一下。

(明显)把视图和控制器混了起来

Reddit用户rhysbrettbowen写道:

我理解JSX不是必需的,不过我们用了很长时间才把逻辑从HTML中抽取出来,现在我们进步了,难道要把HTML再放到逻辑里去吗?

没有很好地把HTML从业务逻辑中分离出来,这是最大的问题。如果HTML和业务逻辑分离,就可以让设计人员负责HTML和样式,而编程人员负责代码,并向模板提供钩子。

Facebook React团队的Peter Hunt在其博客中对此作出了回应,React并没有试图把应用程序的视图和逻辑混起来:

我们都还记得过去将PHP混在HTML中的那些日子,代码很难维护,安全也是事后诸葛亮。我们可不想走老路。

从那时开始,为防止工程师再犯这种错误,我们已经开发了很多客户端和服务器端的模板语言。然而,这些模板语言都是有代价的:用户界面构建起来更为困难。就像交替变换表格中每行的颜色这么简单的事情都要在多种语言中做些处理。

我们应该做的是接受这一点——用户界面会越来越复杂,我们需要一门真正的编程语言并借助其全部表现能力来构建上规模的用户界面。

React就是信奉这一理念的库。React仍然鼓励划分关注点:组件只负责传统的MVC应用中“视图”的角色。然而,不同于过于简单的模板语言,你应该使用JavaScript来构建抽象和复用代码。

与现有框架相比代码冗长

React发布之后不久,Vlad Yazhbin贴出了将React教程中的代码翻译为AngularJS的结果,证明AngularJS代码比原始的React代码更简洁。不过也有人指出,这种比较并不是完全公平的。

即便如此,Facebook开源了他们开发的更多的库,这种努力开发者社区是非常欣赏的。Facebook之前备受瞩目的开源产品包括Hiphop PHP编译器和Tornado。其中Tornado是一个高效的异步Python Web框架,用于构建实时应用,最初是为了推动FriendFeed这个网站而构建的。

React已经放到了github上,开发者可以下载开发构建和产品构建等不同版本 。

查看英文原文:Facebook's React JavaScript User Interfaces Library Receives Mixed Reviews

你可能感兴趣的:(Facebook发布用户界面库React,业界褒贬不一)