Saltar al contenido
Curso de React
Todos los cursos Ir al ejercicio →

JSX a fondo

  • ⏱ 45 minutos
  • 📶 Nivel: principiante
  • 🧩 Incluye ejercicio

💡 🎯 Al terminar esta lección podrás…

  • Explicar qué es JSX y en qué se convierte.
  • Aplicar las diferencias entre JSX y HTML.
  • Insertar expresiones de JavaScript con llaves, en texto y en atributos.
  • Dar estilos con objetos y usar fragmentos.

1.JSX es JavaScript con etiquetas

JSX te permite escribir etiquetas parecidas a HTML dentro de JavaScript. No es HTML ni un texto que se pega en la página: una herramienta (Vite, Babel) lo traduce a llamadas normales de JavaScript antes de que el navegador lo ejecute.

Lo que escribes (JSX)
const saludo = <h1 className="titulo">Hola, React</h1>;
En lo que se convierte (JavaScript)
const saludo = React.createElement(
  "h1",
  { className: "titulo" },
  "Hola, React"
);

Ambas versiones producen exactamente lo mismo. JSX existe porque es mucho más cómodo de leer y escribir, y porque deja el marcado y la lógica de cada pieza en el mismo lugar.

📌 Nota · JSX es opcional, pero universal

Técnicamente podrías usar React sin JSX. En la práctica casi todo el mundo lo usa, así que es lo que aprenderás aquí.

2.Diferencias con HTML

JSX se ve como HTML, pero sigue las reglas de JavaScript. Estas son las diferencias que más te encontrarás:

TemaEn HTMLEn JSX
Clases CSSclass="caja"className="caja" (porque class es palabra reservada)
Etiqueta for<label for="correo"><label htmlFor="correo">
Atributos compuestostabindex, maxlength, onclicktabIndex, maxLength, onClick (camelCase)
Etiquetas vacías<br>, <img>, <input><br />, <img />, <input /> (siempre se cierran)
Estilos en líneastyle="color: red"style={{ color: "red" }} (un objeto)
Comentarios<!-- nota -->{/* nota */}
Varios elementosPueden ser hermanosNecesitan un solo elemento raíz o un fragmento <>…</>
⚛️ Corrige los errores de JSX
Consola

💡 Consejo · Si olvidas una regla

No te preocupes por memorizarlas todas: la consola te avisa. Por ejemplo, si escribes class, React muestra una advertencia que te dice exactamente que debes usar className. Prueba a cambiarlo en el editor de arriba.

3.Llaves { }: JavaScript dentro del JSX

Las llaves son la puerta entre JSX y JavaScript. Todo lo que escribas entre { } se evalúa como una expresión de JavaScript y su resultado se inserta en la pantalla.

⚛️ Expresiones dentro de las llaves
Consola
Puedes poner dentro de { }No puedes poner
Variables y propiedades: {nombre}, {usuario.edad}Sentencias: if, for, while
Operaciones y llamadas: {a + b}, {texto.trim()}Declaraciones: const x = 1
Ternarios: {activo ? "Sí" : "No"}Objetos directos para mostrar: {usuario} (da error)
Expresiones con &&, map, filter…—

⚠️ Importante · Qué se puede «dibujar»

React muestra texto y números; ignora true, false, null y undefined (no dibuja nada). Pero un objeto como { a: 1 } provoca un error, porque no sabe cómo convertirlo en pantalla. Muestra sus propiedades: {usuario.nombre}.

📌 Nota · El caso del 0

Cuidado con {lista.length && <Lista />}: si la longitud es 0, React dibuja un 0. Es una trampa muy común; en la lección 5 verás cómo evitarla.

4.Atributos dinámicos y estilos

Las llaves también sirven en los atributos. Fíjate: con comillas pasas un texto fijo; con llaves, el resultado de una expresión.

Texto fijo frente a expresión
<img src="logo.png" alt="Logo" />            // texto fijo, con comillas
<img src={usuario.foto} alt={usuario.nombre} /> // valor calculado, con llaves
⚛️ Atributos y estilos con objetos
Consola

📌 Nota · ¿Por qué style={{ … }} lleva dos llaves?

La llave exterior abre «JavaScript dentro de JSX». La interior es el objeto { color: "red" } que le pasas. Las propiedades CSS van en camelCase (backgroundColor, no background-color) y los números sin unidad se interpretan como píxeles.

5.Texto, espacios y fragmentos

⚛️ Fragmentos y texto
Consola

6.Buenas prácticas de escritura

Antes y después
// ❌ Difícil de leer
return <p>{usuario.puntos > 100 ? "Experto" : usuario.puntos > 50 ? "Avanzado" : "Novato"}</p>;

// ✅ Cálculo fuera, JSX limpio
let nivel = "Novato";
if (usuario.puntos > 100) nivel = "Experto";
else if (usuario.puntos > 50) nivel = "Avanzado";
return <p>{nivel}</p>;

7.Errores frecuentes

📒 Apuntes para llevar

  • JSX es JavaScript con etiquetas; una herramienta lo traduce a React.createElement(...).
  • Diferencias con HTML: className, htmlFor, atributos en camelCase, etiquetas siempre cerradas y style como objeto.
  • Un componente devuelve un solo elemento raíz o un fragmento <>…</>.
  • Las llaves { } insertan expresiones de JavaScript (no sentencias).
  • React no dibuja true, false, null ni undefined; los objetos dan error; el 0 sí se dibuja.
  • Las llaves también se usan en atributos: src={foto}, disabled={!activo}.
  • Los comentarios en JSX son {/* … */}.

8.Glosario

TérminoSignificado
JSXExtensión de sintaxis de JavaScript que permite escribir etiquetas dentro del código.
ExpresiónCódigo que produce un valor: a + b, nombre.trim(), activo ? 1 : 2.
Fragmento<>…</>: agrupa elementos sin crear un nodo extra en el DOM.
camelCaseConvención de nombres con mayúscula en cada palabra interna: onClick, tabIndex.
classNameAtributo de JSX equivalente al class de HTML.
htmlForAtributo de JSX equivalente al for de HTML en un <label>.
TranspilarTraducir código de una sintaxis a otra (JSX → JavaScript).

🧠 Comprueba lo aprendido

Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.

¿Cómo se escribe el atributo class en JSX?

¿Cuál es la forma correcta de aplicar un estilo?

¿Qué hace React con {false}?

¿Qué NO se puede escribir dentro de las llaves de JSX?

¿Cómo se escribe un comentario dentro del JSX?

Tu progreso se guarda en este navegador y se refleja en el índice del curso.

💡 🚀 ¡Ahora te toca!

La práctica fija lo aprendido. Pasa al ejercicio de esta lección.

Ir al ejercicio