React.js fornisce JSX come una 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, si utilizza direttamente Javascript:
<ul>
{list.map((item) =>
<li>{item}</li>
)}
</ul>
Ciò che non sono stato ancora in grado di spiegare è, perché questo è considerato buono se costrutti analoghi sono considerati cattivi in JSP?
Qualcosa del genere in JSP
<ul>
<% for (item in list) { %>
<li>${item}</li>
<% } %>
</ul>
è considerato un problema di leggibilità da risolvere con tag come <c:forEach>
. Il ragionamento dietro i tag JSTL sembra anche che potrebbero applicarsi a JSX:
- è un po 'più semplice da leggere quando non si alternano sintassi simili a XHTML (parentesi angolari, annidamento) e Java / Javascript (ricci, virgole, parentesi)
- quando hai la lingua e la piattaforma complete disponibili per l'uso all'interno della funzione di rendering, c'è meno per scoraggiarti dal mettere la logica in quella che non vi appartiene.
Le uniche ragioni per cui riesco a pensare al perché JSX è diverso sono:
in Java, hai avuto un incentivo a fare la cosa sbagliata: JSP sarebbe stato ricaricato a caldo, quindi era allettante inserire codice in JSP per evitare un ciclo di ricostruzione / riavvio. La manutenzione è stata sacrificata per una produttività immediata. Bandire gli scriptlet e limitarsi a un insieme fisso di costrutti modello era effettivamente un modo per far rispettare la manutenibilità. Nessuna tale distorsione esiste nel mondo JS.
La sintassi JSP e Java è goffa con il supplemento
<% ... %>
per distinguere il codice Java dalla generazione di elementi e con la sintassi nativa di Java priva di unforeach
concetto o di funzioni di prima classe (fino a poco tempo fa). La penalità della sintassi dell'uso di Javascript nativo per loop e condizionali in JSX è diversa da zero (a mio avviso) ma non così grave come JSP, e probabilmente non abbastanza grave da giustificare l'introduzione di elementi specifici di JSX per loop e condizionali.
C'è qualcos'altro che mi manca?