JSX

JSX (JavaScript as XML) est une syntaxe de type XML, qui permet d’écrire du code HTML directement en JavaScript et aide à garder le code lisible. Cette syntaxe est souvent utilisée avec React (framework JavaScript).

<script type="text/babel">
    const JSX = (<div>
        <h1>This is a block of JSX</h1>
        <p>Here is a subtitle</p>
    </div>);
    console.log(JSX);
</script>
<!-- Les parenthèses ne sont pas obligatoires -->

Le code JSX ne peut pas être interprété directement par le navigateur, il doit être transpilé en Javascript au préalable. Pour ce faire, on peut soit utiliser la ligne de commande (avec Webpack par exemple), soit indiquer que le script est de type text/babel (comme illustré ci-dessus) et inclure la librairie Babel dans le document pour effectuer la convertion JSX → JavaScript au runtime.

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.29/browser.min.js"></script>

Syntaxe

La syntaxe JSX est très similaire au HTML, à quelques différences près.

JS et JSX

Parce que JSX est une extension à la syntaxe Javascript, on peut écrire du Javascript directement à l’intérieur du JSX. Il suffit d’inclure le code Javascript entre accolades.

<p>Status is : {b ? "ok" : "nok"}</p>
<div>Lorem</div>
{/* Ceci est un commentaire JSX */}
<div>Ipsum</div>

On peut utiliser l’opérateur && pour afficher du texte uniquement lorsqu’une condition est remplie — de manière plus concise qu’un if.

{condition && <p>markup</p>} 

Et on peut utiliser filter et map pour afficher les listes à l’intérieur de JSX.

<ul>
  {arr.map((item, i) =>
    <li key={i}
        className={"item" + (i == this.currentIndex ? " active" : "")}
        onClick={this.setActive(i)}>{item}</li>
  )}
</ul>