4. JSX

React utiliza una sintaxis basada en XML (similar al HTML) para construir sus componentes usando el Virtual DOM. Esta sintaxis se transcompila a JavaScript (Tal como lo hacen TypeScript o CoffeeScript), por lo que en el fondo sólo es JavaScript presentado de una forma un poco más "visual".

React plantea otra forma de construir vistas, diferente a los templates de toda la vida. Si bien no es la idea, los templates separan tecnologías, no preocupaciones (separation of concerns). Los componentes de React buscan enfocarse en la separación de preocupaciones propiamente dicha. Por lo tanto, en un principio esto puede parecer "mezclar JavaScript y HTML", o más genéricamente, "mezclar lógica y presentación", pero en realidad estamos agrupando la lógica y la presentación relacionadas en módulos independientes. Separación de preocupaciones.

Diferencias de trabajar con JSX o sin JSX en React

Con JSX


 class Componente extends React.Component {

    render() {
        return (
            <div>
                <h1>Hola, mundo!</h1>
            </div>
        );
    }

 };

En este ejemplo sencillo y puramente ilustrativo, se ve todo bastante similar. Sin embargo, hay que destacar que esta sintaxis utiliza clases propias de JavaScript (disponibles a partir de ECMAScript 6) y no un sistema propio. Hoy por hoy es necesario utilizar un transcompilador para generar código compatible con motores de JavaScript que no reconocen las clases todavía, pero en el futuro esto es big deal, ya que utilizar clases nativas significa utilizar el estándar y además una ejecución más veloz.

Sin JSX


 class Componente extends React.Component {
     render() {
        return (
            React.createElement("div", null,
                React.createElement("h1", null, "Hola, mundo!"),

            );
        );
    }

    };

Cosas a tener en cuenta

  • render debe devolver un único elemento html

  • El atributo class de html es una palabra reservada de JavaScript, por lo que en JSX se utiliza className

  • Las variables en JSX se ponen mediante llaves

import React, { Component } from 'react';

export default class App extends Component {
  render() {
    var respuesta = 'Hola, ¡buenos días!'
    return (
      <div>
        <h1>Hola Mundo</h1>
        <p className="rojo">{respuesta}</p>
      </div>
    );
  }
}

results matching ""

    No results matching ""