React.js fournit JSX comme une syntaxe de type XHTML pour la construction d'un arbre de composants et d'éléments. JSX compile en Javascript, et au lieu de fournir des boucles ou des conditions dans JSX proprement dit, vous utilisez directement Javascript:
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
Ce que je n'ai pas encore pu expliquer, c'est pourquoi est-ce considéré comme bon si les constructions analogues sont considérées comme mauvaises dans JSP?
Quelque chose comme ça dans JSP
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
est considéré comme un problème de lisibilité à résoudre avec des balises comme <c:forEach>
. Le raisonnement derrière les balises JSTL semble également pouvoir s'appliquer à JSX:
- c'est un peu plus facile à lire lorsque vous ne basculez pas entre la syntaxe de type XHTML (crochets, imbrication) et Java / Javascript (curlies, virgules, parens)
- lorsque vous avez le langage complet et la plate-forme disponibles pour une utilisation à l'intérieur de la fonction de rendu, il y a moins pour vous décourager de mettre une logique qui n'y appartient pas.
Les seules raisons pour lesquelles je peux penser pourquoi JSX est différent sont:
en Java, vous étiez incité à faire la mauvaise chose - JSP serait rechargé à chaud, il était donc tentant de mettre du code dans les JSP pour éviter un cycle de reconstruction / redémarrage. La maintenabilité a été sacrifiée pour une productivité immédiate. Bannir les scriptlets et se limiter à un ensemble fixe de constructions de modèles était en fait un moyen de renforcer la maintenabilité. Aucune distorsion de ce type n'existe dans le monde JS.
La syntaxe JSP et Java est maladroite avec le supplément
<% ... %>
pour distinguer le code Java de la génération d'éléments, et avec la syntaxe native de Java dépourvue deforeach
concept ou de fonctions de première classe (jusqu'à récemment). La pénalité syntaxique de l'utilisation de Javascript natif pour les boucles et les conditions dans JSX est non nulle (à mon avis) mais pas aussi mauvaise que JSP, et sans doute pas assez mauvaise pour justifier l'introduction d'éléments spécifiques à JSX pour les boucles et les conditions.
Y a-t-il autre chose qui me manque?