Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • JSX se transforma en JavaScript
  • Mezclando código JavaScript
  • Estilos inline
  • Eventos del DOM
  1. React

JSX

PreviousPrimeros pasosNextComponentes

Last updated 2 years ago

JSX (JavaScript XML) es la sintaxis que se utiliza para construir el markup de los componentes de React. Veamos un ejemplo tomado del código que genera :

<div className="App">
  <header className="App-header">
    <img src={logo} className="App-logo" alt="logo" />
    <h1 className="App-title">Welcome to React</h1>
  </header>
  <p className="App-intro">
    To get started, edit <code>src/App.js</code> and save to reload.
  </p>
</div>

JSX es similar a HTML pero con algunas diferencias importantes:

  1. Se utiliza className en vez de class para definir las clases de un elemento.

     // mal
     <div class="active"></div>
    
     // bien
     <div className="active"></div>
  2. Todas las etiquetas deben estar cerradas con /> o una etiqueta de cierre.

     // mal
     <img src="...">
     <input type="text">
    
     // bien
     <img src="..." />
     <input type="text"></input>

JSX se transforma en JavaScript

Por debajo JSX se transforma en código JavaScript. Por ejemplo, el siguiente código JSX

<div class="active">Hola Mundo</div>

se transforma en el siguiente código JavaScript:

React.createElement('div', { className: 'active'},  'Hola mundo');

La ventaja de JSX es que, como es JavaScript, podemos:

  1. Ver algunos errores en tiempo de compilación.

  2. Asignar JSX a variables. Por ejemplo:

     const elem = <p>Hola</p>;
  3. Retornar JSX desde métodos. Por ejemplo:

     renderText() {
       if (someCondition) {
         return <p>Hola</p>;
       } else {
         return <p>Mundo</p>;
       }
     }

Una restricción de JSX es que siempre debes tener un elemento raíz:

// mal
const elem = <p>Hola</p><p>Mundo</p>;

// bien
const elem = <div>
    <p>Hola</p>
    <p>Mundo</p>
  </div>;

Para no perder la indentación en el último ejemplo podemos utilizar paréntesis para escribir el JSX en una nueva línea:

const elem = (
  <div>
    <p>Hola</p>
    <p>Mundo</p>
  </div>
);

Este es un patrón muy común en las aplicaciones de React.

Mezclando código JavaScript

Para mezclar código JavaScript en JSX utiliza corchetes ({}):

const style = "active";
const title = "Hola Mundo";

<div className={style}>{title}</div>;

Una restricción de JSX es que no puedes utilizar if, else, while o for.

Para agregar condicionales utiliza el operador ternario:

<div>
  {condition ? <h1></h1> : null}
</div>

Para mostrar elementos de un arreglo o un objeto utiliza map:

const names = ["Pedro", "Juan", "Germán"];

const jsx = (
  <ul>
    {names.map((name) =>
      <li>{name}</li>
    )}
  </ul>
);

Estilos inline

Es posible definir y utilizar estilos inline en JSX:

let styles = {
  borderColor: "#999"
};

const jsx = (
  <div style={styles}>
    Hola mundo
  </div>
);

Eventos del DOM

En JSX se utilizan los eventos estándar del DOM como onclick, onchange, onkeydown, etc. pero utilizando camelCase: onClick, onChange, onKeyDown, etc. Por ejemplo:

<button onClick={alert("Hola!")}></button>

Fíjate que utilizamos corchetes ({}) para escribir nuestro código JavaScript. También podríamos pasar una función que es invocada cuando se genere el evento:

const saluda = () => alert("Hola!");

<button onClick={saluda}></button>

Fíjate que no estamos invocando la función saluda, sólo la estamos pasando para que React la invoque cuando ocurra el evento.

Puedes utilizar el para ver en qué se convierte el código JSX que escribes.

create-react-app
REPL de Babel