O React.js fornece JSX como uma sintaxe semelhante ao XHTML para construir uma árvore de componentes e elementos. O JSX é compilado no Javascript e, em vez de fornecer loops ou condicionais no JSX propriamente dito, você usa o Javascript diretamente:
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
O que ainda não consegui explicar é: por que isso é considerado bom se construções análogas são consideradas ruins no JSP?
Algo assim em JSP
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
é considerado um problema de legibilidade a ser resolvido com tags como <c:forEach>
. O raciocínio por trás das tags JSTL também parece que eles poderiam se aplicar ao JSX:
- é um pouco mais fácil de ler quando você não está alternando entre sintaxe do tipo XHTML (colchetes angulares, aninhamento) e Java / Javascript (curvas, vírgulas, parênteses)
- quando você tem o idioma e a plataforma completos disponíveis para uso dentro da função de renderização, há menos para desencorajá-lo a inserir lógica que não pertence a ele.
As únicas razões pelas quais consigo pensar por que o JSX é diferente é:
em Java, você tinha um incentivo para fazer a coisa errada - o JSP seria recarregado a quente, por isso era tentador colocar código em JSPs para evitar um ciclo de reconstrução / reinicialização. A capacidade de manutenção foi sacrificada para produtividade imediata. O banimento de scriptlets e a limitação a um conjunto fixo de construções de modelos eram efetivamente uma maneira de reforçar a manutenção. Nenhuma distorção existe no mundo das JS.
A sintaxe JSP e Java é desajeitada com o extra
<% ... %>
para distinguir o código Java da geração de elementos e com a sintaxe nativa do Java sem umforeach
conceito ou funções de primeira classe (até recentemente). A penalidade de sintaxe do uso de Javascript nativo para loops e condicionais em JSX é diferente de zero (na minha opinião), mas não é tão ruim quanto JSP e, possivelmente, não é ruim o suficiente para justificar a introdução de elementos específicos de JSX para loops e condicionais.
Há algo mais que estou perdendo?