FacebookがオープンソースしたReactは、Instagram ウェブサイトを Facebookのウェブサイトの部分と同様に構築するために使用され、応答の良いユーザインタフェースを構築するためのJavaScriptライブラリである。AngularJS, MeteorJS、そしてPolymerに実装されたModel-Driven Viewsのようなフレームワークの最近の傾向に従って、Reactは、データモデル上にユーザインタフェースを宣言的に指定するという考えに基づいており、ユーザは自動的に基にあるデータと同期を保つ。前述のフレームワークとは異なり、ReactはHTMLではなくJavaScriptを使って、それらのユーザインタフェースを構築する。この設計上の決定理由として柔軟性を挙げている。
それには依存していないが、Reactのウェブサイトにあるサンプルコードは、すべてJSX、XMLリテラル付きJavaScriptの拡張に依存している。例えば、以下はJSXを使ってReactで表した典型的な "Hello World"の例だ。
/** @jsx React.DOM */ var HelloMessage = React.createClass({ render: function() { return{'Hello ' + this.props.name}; } }); React.renderComponent(, mountNode);
埋め込まれたXMLは、プリコンパイルの段階で通常のJavaScript DOM APIコールに変換される。
リリース以来、ライブラリは広く批判されている。その批判は一般的に2つのカテゴリに分類される。ビューとロジックの混在、そして既存のフレームワークに比べてのコードの冗長性である。
(見かけの)ビューとコントローラの混在
Reddit ユーザーの 'rhysbrettbowen'が書いている:
私はJSXが必要ではないことを理解しましたが、私たちは非常に長い時間をかけてHTMLからロジックを取り除いたので、今、我々は前に進みたい、そうではなくロジックにHTMLを入れたいのか?
これの最大の問題は、それがビジネスロジックからHTMLを分離するのをうまくやっていないことです。それらが別れているなら、デザイナーにHTML /スタイルの仕事をさせることができ、プログラマーはその代わりに、コードを開発し、単にテンプレートで動くフックを提供することができます。
これと同じようなコメントへの回答で、FacebookのReactチームのPeter Hunt氏が ブログの記事で説明している。Reactはアプリケーションのビューとロジックをミックスしようとしては全くない。
我々皆は、HTMLとPHPが混在した時代を覚えています。コードは、メンテが本当に大変で、セキュリティは付け足しだった。我々は、あのような時代に戻りたくない。/p>
その時代以来、エンジニアがこの罪を犯さないように、言語をテンプレートクライアント側とサーバー側でテンプレート化する言語を開発してきました。しかし、これらのテンプレート言語はコストがかかります:それらはユーザーインターフェイスの構築を難しくします。テーブル中の行の色を変えるような単純なことをするのに、多くの言語で輪を飛び抜けるようなことが必要です。
私たちが代わりにやるべきことは、ユーザーインタフェースはますます複雑になってきていることと、我々は様々な規模でユーザインタフェースを構築するために本物のプログラミング言語が(その表現力のすべてを持つ)必要があることを受け入れることです。
React はこのアイデアを受け入れているライブラリです。React はまだ関心の分離を奨励しています:コンポーネントは伝統的なMVCアプリケーションの 「ビュー」の役割のみを果たします。しかし、過剰に単純化したテンプレート言語ではなく、JavaScriptを使用して抽象を構築し、コードを再利用します。
既存のフレームワークと比較された例の冗長性
React発表の後、簡潔にVlad Yazhbin氏が Reactチュートリアルコードを AngularJSに翻訳したものを掲載したが、元のReact コードよりどのくらい簡潔になったかを示している。しかし、人々が指摘しているのは、 その比較が完全に公平とは、言えないかもしれないと、いうことである。
それにもかかわらず、Facebookが開発したライブラリ以上のものをオープンソースした彼らの努力は、コミュニティに感謝されている。開発ライブラリのソースより多くを開くために、Facebookの努力は開発者コミュニティによって評価されています。Facebookによる以前の知名度の高いオープンソースのリリースには、Hiphop PHP コンパイラとTornado、もともと FriendFeedを動かすために作られた、リアルタイムアプリケーションを構築するための効率的な非同期のPython Webフレームワークが含まれている。