Frontend

Cos'è JSX?

Autore

Manuel Ricci

JSX è una sintassi di estensione per JavaScript proposta da Facebook insieme alla libreria React. È utilizzata per descrivere l'interfaccia utente (UI) in un modo che assomiglia a HTML all'interno del codice JavaScript. Nonostante la sua apparenza simile a HTML, JSX viene trasformato in chiamate di funzione JavaScript prima di essere eseguito nel browser. Questo processo di trasformazione è gestito da trasformatori come Babel.

Concetti Base di JSX

  1. Elementi JSX: Sono l'unità di base in JSX e rappresentano tag HTML, ma vengono trasformati in elementi React. Gli elementi JSX possono essere sia tag HTML standard che componenti React definiti dall'utente.

  2. Espressioni: Le espressioni JavaScript possono essere incorporate all'interno di JSX racchiudendole tra parentesi graffe {}. Ciò permette di inserire valori dinamici, come variabili, funzioni o qualsiasi altra espressione JavaScript, direttamente nell'UI.

  3. Attributi: Gli attributi in JSX sono simili a quelli di HTML, ma utilizzano la camelCase per le loro denominazioni. Ad esempio, class diventa className in JSX, e tabindex diventa tabIndex.

  4. Componenti: In JSX, i componenti vengono definiti con la prima lettera maiuscola e possono essere utilizzati come elementi JSX. I componenti possono essere sia funzioni che classi e permettono di costruire UI complesse composte da parti riutilizzabili.

Esempi Pratici

Esempio di Elemento JSX

1const elemento = <h1>Ciao, mondo!</h1>;

Questo esempio mostra un semplice elemento JSX che descrive un heading H1 con il testo "Ciao, mondo!".

Incorporare Espressioni

1const nome = 'React';
2const elemento = <h1>Ciao, {nome}!</h1>;

Qui, l'espressione {nome} viene valutata e inserita nel risultato finale, generando un heading che dice "Ciao, React!".

Attributi JSX e Componenti

1const ImmagineProfilo = (props) => {
2  return <img src={props.url} alt="Immagine Profilo" />;
3};
4
5const profilo = <ImmagineProfilo url="url-immagine.jpg" />;

In questo esempio, ImmagineProfilo è un componente React che accetta props. Viene usato l'attributo JSX src per passare l'URL dell'immagine al componente.

Componenti con Children

1const Saluto = (props) => {
2  return <h1>Ciao, {props.children}!</h1>;
3};
4
5const messaggio = <Saluto>Pippo</Saluto>;

Qui, il componente Saluto utilizza props.children per inserire contenuti dinamici tra i tag di apertura e chiusura del componente.

Trasformazione JSX

Il codice JSX viene trasformato in chiamate JavaScript prima dell'esecuzione. Ad esempio, l'elemento JSX <h1>Ciao, mondo!</h1> viene trasformato in qualcosa simile a React.createElement('h1', null, 'Ciao, mondo!').

JSX offre una sintassi più leggibile e espressiva per costruire l'interfaccia utente, rendendo il codice più vicino all'HTML e più facile da comprendere. Tuttavia, è importante ricordare che dietro le quinte, tutto viene trasformato in JavaScript puro.

Rendering condizionale e cicli

In React, l'utilizzo di cicli e condizioni all'interno di JSX segue le stesse regole di base del JavaScript, ma con alcune peculiarità dovute alla sintassi JSX. Ecco alcuni esempi pratici che mostrano come utilizzare cicli e condizioni in componenti React.

Esempio 1: Rendering Condizionale

Il rendering condizionale in React permette di renderizzare componenti o elementi in base a determinate condizioni. Utilizziamo l'operatore ternario per un esempio semplice:

1function SalutoUtente(props) {
2  return (
3    <h1>
4      {props.isLoggedIn ? 'Benvenuto, utente!' : 'Benvenuto, ospite!'}
5    </h1>
6  );
7}

In questo esempio, il componente SalutoUtente renderizza un messaggio diverso a seconda del valore della prop isLoggedIn.

Esempio 2: Rendering di Liste

Per eseguire cicli in JSX, si utilizza spesso il metodo .map() per iterare su un array e renderizzare una lista di elementi React. Vediamo un esempio che renderizza una lista di nomi:

1function ListaNomi(props) {
2  const nomi = props.nomi;
3  const listaNomi = nomi.map((nome, index) =>
4    <li key={index}>{nome}</li>
5  );
6
7  return <ul>{listaNomi}</ul>;
8}
9
10// Uso del componente
11const nomi = ['Luca', 'Marco', 'Sofia'];
12const elemento = <ListaNomi nomi={nomi} />;

In questo esempio, il componente ListaNomi prende un array di nomi come prop e utilizza .map() per creare un elemento <li> per ogni nome nell'array, assegnando un key unico ad ogni elemento per aiutare React a identificare quale elemento ha cambiato.

Esempio 3: Uso di && per il Rendering Condizionale

Un altro modo per implementare il rendering condizionale in React è l'uso dell'operatore &&. Questo è utile quando si vuole renderizzare un componente solo se una certa condizione è vera.

1function MessaggioBenvenuto(props) {
2  return (
3    <div>
4      {props.isLoggedIn && <h1>Benvenuto, utente!</h1>}
5    </div>
6  );
7}

In questo caso, il messaggio di benvenuto verrà renderizzato solo se props.isLoggedIn è true.

Esempio 4: Condizioni Complesse

Quando le condizioni diventano più complesse, potresti voler usare una funzione o un blocco di codice esterno per determinare cosa renderizzare. Ecco un esempio:

1function MessaggioPersonalizzato(props) {
2  function renderMessaggio() {
3    if (props.isLoggedIn) {
4      return <h1>Benvenuto, {props.nome}!</h1>;
5    } else {
6      return <h1>Benvenuto, ospite!</h1>;
7    }
8  }
9
10  return (
11    <div>
12      {renderMessaggio()}
13    </div>
14  );
15}

In questo esempio, la funzione renderMessaggio decide quale messaggio renderizzare in base alla prop isLoggedIn.

Questi esempi illustrano come JSX e React gestiscono i pattern di rendering condizionale e i cicli, consentendo di costruire interfacce utente dinamiche e reattive.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.