Vai al contenuto principale

Cos'è JSX?

Scopri come utilizzare JSX e React per creare interfacce utente dinamiche: esempi pratici con cicli, condizioni e molto altro.

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

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

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

Incorporare Espressioni

const nome = 'React';
const 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

const ImmagineProfilo = (props) => {
  return <img src={props.url} alt="Immagine Profilo" />;
};

const 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

const Saluto = (props) => {
  return <h1>Ciao, {props.children}!</h1>;
};

const 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:

function SalutoUtente(props) {
  return (
    <h1>
      {props.isLoggedIn ? 'Benvenuto, utente!' : 'Benvenuto, ospite!'}
    </h1>
  );
}

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:

function ListaNomi(props) {
  const nomi = props.nomi;
  const listaNomi = nomi.map((nome, index) =>
    <li key={index}>{nome}</li>
  );

  return <ul>{listaNomi}</ul>;
}

// Uso del componente
const nomi = ['Luca', 'Marco', 'Sofia'];
const 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.

function MessaggioBenvenuto(props) {
  return (
    <div>
      {props.isLoggedIn && <h1>Benvenuto, utente!</h1>}
    </div>
  );
}

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:

function MessaggioPersonalizzato(props) {
  function renderMessaggio() {
    if (props.isLoggedIn) {
      return <h1>Benvenuto, {props.nome}!</h1>;
    } else {
      return <h1>Benvenuto, ospite!</h1>;
    }
  }

  return (
    <div>
      {renderMessaggio()}
    </div>
  );
}

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.

Unisciti a WebTea

Niente spam. Solo contenuti formativi su Software Engineering.

Ci sono due cose che non ci piacciono: lo spam e il mancato rispetto della privacy. Seleziona come vuoi restare in contatto:

Preferenze di contatto

Usiamo Mailchimp come piattaforma di marketing. Cliccando su iscriviti, accetti la nostra privacy policy e che le tue informazioni vengano trasferite a Mailchimp per l'elaborazione. Termini e Privacy. Puoi disiscriverti in qualsiasi momento.