React.jsは、コンポーネントと要素のツリーを構築するためのXHTMLのような構文としてJSXを提供します。JSXはJavascriptにコンパイルされ、JSX固有のループまたは条件を提供する代わりに、Javascriptを直接使用します。
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
まだ説明できていないのは、JSPで類似のコンストラクトが悪いと考えられる場合、なぜこれが良いと考えられるのですか?
JSPのこのようなもの
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
はのようなタグで解決される読みやすさの問題と見なされます<c:forEach>
。JSTLタグの背後にある理由は、JSXにも適用できるようです。
- XHTMLのような構文(山括弧、ネスト)とJava / Javascript(中括弧、コンマ、括弧)を切り替えていない場合は、読みやすくなります。
- レンダリング関数内で使用可能な完全な言語とプラットフォームがある場合、そこに属さないロジックを入れることを思いとどまらせることはほとんどありません。
JSXが異なる理由を考えることができる唯一の理由は次のとおりです。
Javaでは、間違ったことをするインセンティブがありました。JSPはホットリロードされるので、JSPにコードを入れて再構築/再起動のサイクルを避けようとしました。保守性は、即時の生産性のために犠牲になりました。スクリプトレットを廃止し、テンプレート構成体の固定セットに制限することは、実質的に保守性を強化する方法でした。JSの世界にはそのような歪みはありません。
JSPとJavaの構文は、
<% ... %>
Javaコードと要素の生成を区別するための余分な要素や、foreach
概念やファーストクラスの機能を持たないJavaのネイティブな構文(最近まで)に不格好です。JSXでループと条件にネイティブJavascriptを使用する構文のペナルティはゼロではありませんが(私の意見では)、JSPほど悪くはなく、ループと条件にJSX固有の要素を導入することを保証するのに十分なほど悪くはありません。
私が見逃している何か他のものがありますか?