Llevas varias lecciones escribiendo algo que parece HTML dentro de funciones JavaScript. Eso no es HTML — es JSX (JavaScript XML).
JSX es una extensión de sintaxis que te permite escribir estructura de interfaz directamente en tu código JavaScript. Parece HTML, se siente como HTML, pero en realidad se transforma en llamadas a funciones de JavaScript.
Cuando escribes:
React lo convierte internamente en:
JSX es solo azúcar sintáctico. Podrías escribir toda tu app con React.createElement, pero nadie quiere vivir así.
JSX se parece a HTML, pero tiene sus propias reglas. Rompe una y tu app no compila. Aquí van las más importantes:
Tu componente debe retornar un elemento que envuelva todo lo demás:
Los Fragments (<>...</>) son perfectos cuando no quieres añadir un div extra al DOM solo para cumplir la regla.
En HTML puedes escribir <img> o <br> sin cerrar. En JSX toda etiqueta debe cerrarse:
class es una palabra reservada en JavaScript (se usa para definir clases). Por eso en JSX usas className:
Por la misma razón, for en las etiquetas <label> se convierte en htmlFor:
Los atributos de eventos y algunos otros se escriben en camelCase:
| HTML | JSX |
|---|---|
class | className |
for | htmlFor |
onclick | onClick |
tabindex | tabIndex |
<img> | <img /> |
<br> | <br /> |
| Múltiples raíces | Un solo elemento raíz |
En el editor tienes código JSX con errores. Está comentado para que no rompa la app. Tu misión:
class → className<img />)<>...</> o <div>)Cuando todo compile y se vea en el preview, habrás dominado las reglas de JSX.
JSX parece raro al principio, pero en una semana te preguntarás cómo vivías sin él.