React.js zapewnia JSX jako składnię podobną do XHTML do konstruowania drzewa komponentów i elementów. JSX kompiluje się w Javascripcie, a zamiast dostarczania pętli lub warunków w JSX, używasz Javascript bezpośrednio:
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
Nie byłem jeszcze w stanie wyjaśnić, dlaczego uważa się to za dobre, jeśli analogiczne konstrukcje są uważane za złe w JSP?
Coś takiego w JSP
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
uważa się za problem z czytelnością, który należy rozwiązać za pomocą tagów takich jak <c:forEach>
. Rozumowanie za tagami JSTL również wydaje się mieć zastosowanie do JSX:
- jest trochę łatwiejszy do odczytania, gdy nie przełączasz się między składnią podobną do XHTML (nawiasy kątowe, zagnieżdżanie) i Java / JavaScript (curlies, przecinki, parens)
- kiedy masz do dyspozycji pełny język i platformę do użycia w funkcji renderowania, nie musisz już zniechęcać do wprowadzania logiki, która tam nie należy.
Jedyne powody, dla których mogę wymyślić, dlaczego JSX jest inny, to:
w Javie miałeś motywację do zrobienia czegoś złego - JSP zostałby ponownie załadowany na gorąco, więc kuszenie było umieszczenie kodu w JSP, aby uniknąć cyklu odbudowywania / restartowania. Utrzymanie poświęcono dla natychmiastowej produktywności. Usunięcie skryptletów i ograniczenie do ustalonego zestawu konstrukcji szablonów było skutecznym sposobem na wymuszenie łatwości konserwacji. W świecie JS nie ma takich zniekształceń.
Składnia JSP i Java jest nieporęczna, ponieważ
<% ... %>
pozwala odróżnić kod Java od generowania elementów, a natywna składnia Java nie maforeach
koncepcji ani funkcji pierwszej klasy (do niedawna). Kara składniowa za używanie natywnego Javascript dla pętli i instrukcji warunkowych w JSX jest niezerowa (moim zdaniem), ale nie tak zła jak JSP i prawdopodobnie niewystarczająca, aby uzasadnić wprowadzenie elementów specyficznych dla JSX dla pętli i instrukcji warunkowych.
Czy brakuje mi czegoś jeszcze?