React.js fornisce JSX come sintassi simile a XHTML per la costruzione di un albero di componenti ed elementi. JSX si compila in Javascript, e invece di fornire loop o condizionali in JSX corretto, usi Javascript direttamente:
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
Ciò che non sono stato in grado di spiegare è, perché è considerato buono se i costrutti analoghi sono considerati negativi in JSP?
Qualcosa di simile in JSP
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
è considerato un problema di leggibilità da risolvere con tag come <c:forEach>
. Anche il ragionamento alla base dei tag JSTL sembra poter essere applicato a JSX:
- è un po 'più facile da leggere quando non si alterna la sintassi XHTML (parentesi angolari, nidificazione) e Java / Javascript (curvi, virgole, parenti)
- quando hai il linguaggio e la piattaforma completi disponibili per l'uso all'interno della funzione di rendering, c'è meno per scoraggiarti dal mettere la logica in cui non ci appartiene.
L'unica ragione per cui riesco a pensare perché JSX è diverso è:
-
in Java, hai avuto un incentivo a fare la cosa sbagliata: JSP sarebbe stato ricaricato a caldo, quindi era allettante inserire il codice in JSP per evitare un ciclo di ricostruzione / riavvio. La manutenibilità è stata sacrificata per la produttività immediata. Banchettare scriptlet e limitare a un set fisso di costrutti di template era in effetti un modo per rafforzare la manutenibilità. Nessuna distorsione del genere esiste nel mondo JS.
-
La sintassi JSP e Java è goffo con l'extra
<% ... %>
per distinguere il codice Java dalla generazione di elementi e con la sintassi nativa di Java priva di un concettoforeach
o funzioni di prima classe (fino a poco tempo fa). La penalità di sintassi dell'uso di Javascript nativo per cicli e condizionali in JSX è diversa da zero (a mio parere) ma non così grave come JSP, e probabilmente non abbastanza grave da giustificare l'introduzione di elementi specifici di JSX per cicli e condizionali.
C'è qualcos'altro che mi manca?