React.js提供JSX作为类似于XHTML的语法,用于构造组件和元素的树。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中以避免重新生成/重新启动周期。为了立即获得生产力,牺牲了可维护性。放逐scriptlet并限制为一组固定的模板结构是有效地增强可维护性的一种方法。JS世界中不存在这种失真。
JSP和Java语法笨拙,
<% ... %>
无法将Java代码与元素生成区分开来,并且Java的本机语法缺乏foreach
概念或一流的功能(直到最近)。在我看来,在JSX中将本机Javascript用于循环和条件的语法代价是非零的,但不如JSP差,并且可以说不足以保证引入特定于JSX的循环和条件元素。
还有其他我想念的东西吗?