Perché JSX è buono, quando gli script di JSP sono negativi?

17

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 concetto foreach 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?

    
posta wrschneider 18.11.2015 - 19:38
fonte

4 risposte

9

In primo luogo, le persone che hanno creato JSX non erano d'accordo con le persone a cui non piaceva JSP. Vedi la loro discussione qui: Perché abbiamo costruito Reagire? nonché Visualizzazione dei dati

I modelli si basa sull'idea di creare una divisione tra la logica e la presentazione di una pagina. Su questa teoria il tuo codice javascript (o java) non dovrebbe preoccuparsi di quale markup viene visualizzato, e il tuo markup non dovrebbe riguardare nessuna delle logiche coinvolte. Questa divisione è essenzialmente il motivo per cui le persone criticano i vari linguaggi template che consentivano facilmente di combinare il codice con il modello (PHP / JSP / ASP).

React è basato sui componenti. Gli autori di reagire sostengono che la logica e la presentazione di un componente sono strettamente collegate, e il tentativo di dividerle non ha alcun senso. Invece, una pagina dovrebbe essere rotta da pezzi logici. In questo modo potresti dividere la barra dell'intestazione, i commenti, il post, le domande correlate, ecc. In componenti separati. Ma non ha senso cercare di dividere la logica per le domande correlate dalla presentazione.

La differenza principale tra qualcosa come JSX e qualcosa come JSP è che JSP è un linguaggio template che include un po 'di java per la logica. JSX è javascript con un'estensione della sintassi per semplificare la costruzione di frammenti di html. L'enfasi è diversa. Dal momento che JSX abbraccia questo approccio, finisce per produrre un approccio più pulito e più carino poi fatto da JSP o amici.

Ma alla fine, si tratta del fatto che le persone che hanno reagito non amavano i modelli. Pensano che siano una cattiva idea e che dovresti mettere la tua logica di markup e presentazione nello stesso posto.

    
risposta data 30.12.2015 - 00:22
fonte
2

Come outsider di React, ho visto JSX come un altro "odore di struttura" nello zoo affollato di scheletri di strutture. Non sono ancora convinto che non sia così.

Penso che una definizione praticabile di "utile" sia che una libreria / framework / pattern risolve più problemi di quanti ne causi. Non sono ancora convinto che JSX si adatti a questa definizione. È il proverbiale "spremere il palloncino" ... tu soffochi un problema qui, si sparge là. Per me, JSX non risolve alcun problema particolare ... è solo "diverso".

La nozione di introdurre una semantica compilabile che ha bisogno di un processo di compilazione formalizzato è utile in alcune circostanze: per esempio, la compilazione di LESS dei file .css fornisce una struttura molto necessaria attorno al css, che è una struttura gerarchica con importazioni e esclude, quindi è molto incline a "soluzioni per spaghetti". Ma i pre-compilatori Javascript ... non così tanto.

    
risposta data 18.11.2015 - 23:42
fonte
1

In breve:

  • Gli sviluppatori di front-end dovrebbero conoscere lo scripting e i modelli
  • JSX e JSP sono entrambi linguaggi di template
  • JavaScript è un linguaggio di scripting
  • Java non è un linguaggio di scripting

Riferimenti

risposta data 13.08.2018 - 21:49
fonte
0

Sebbene non utilizzi JSX, in base alla descrizione, il lavoro del frammento JSX è di presentare i dati, ovvero, è un componente di visualizzazione nel linguaggio di MVC. Il frammento di JSX presumibilmente non sa né importa da dove provengano i dati, che è quello che vuoi.

Una pagina JSP ben strutturata conterrà solo direttive JSTL come accennato. Le direttive di JSTL semplificano semplicemente i tuoi JSP in modo che non siano ingombri del recupero dall'oscilloscopio, che controllino la presenza di null ecc. È sorprendente quanta confusione rimuove e ti incoraggia anche a tenerlo declutterato.

Proprio come il frammento JSX; l'unico lavoro del JSP dovrebbe essere capire come presentare i dati ricevuti senza preoccuparsi di dove proviene.

In sintesi, se la tua vista è JSX o JSP, se la stai facendo correttamente, la tua vista presenterà solo i dati.

Riguardo al perché potresti spostare la presentazione sul client invece di farlo sul server, questo ti dà più flessibilità. Il tuo sito web può ottenere i suoi dati tramite servizi web (ad es. ReST) ed essere solo un altro cliente. Se in seguito decidi di volere un'app nativa per Android o iOS, possono utilizzare lo stesso set di servizi Web del tuo sito web.

    
risposta data 18.11.2015 - 19:59
fonte

Leggi altre domande sui tag