JSX è un’estensione della sintassi JavaScript e produce elementi React con una sintassi molto simile al linguaggio HTML. L’esempio precedente può essere riscritto cosi:
const element = <h1>Hello World!</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
Si può usare React senza JSX ma JSX rende React molto più elegante.
Il browser non è in grado di interpretare nativamente questo tipo di sintassi. Per questo motivo, è necessario aggiungere un riferimento a un cosiddetto pre-compilatore, ovvero uno script, da includere nella pagina, capace di trasformare JSX in javascript. Questo pre-compilatore si chiama Babel.
Per poter passare variabili all’interno di JSX si usano le parentesi graffe:
const name = 'Giuseppe Verdi';
const element = <h1>Hello, {name}</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
Qualsiasi codice javascript può essere anch’esso racchiuso all’interno di parentesi graffe in JSX.
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Giuseppe',
lastName: 'Verdi'
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
Le espressioni JSX diventano normali oggetti JavaScript. Per questo motivo, si può utilizzare JSX all’interno di Javascript e viceversa:
function getGreeting(user) {
if (user) {
return
Hello, {formatName(user)}!
;
}
return Hello, Stranger.
;
}
