14-Archivos JSX en React
Introducción a JSX
En React, JSX es una extensión de sintaxis que nos permite escribir código similar a HTML dentro de archivos JavaScript. Esto es una gran ventaja sobre el JavaScript tradicional donde teníamos que escribir HTML como strings.
¿Qué veremos en este tutorial?
Diferencias entre JavaScript tradicional y JSX
Cómo crear y trabajar con archivos .jsx
Estructura básica de un proyecto React
Renderizado de componentes
1. De JavaScript Tradicional a JSX
JavaScript tradicional (sin React)
// Teníamos que escribir HTML como strings
const elemento = '<div class="contenedor"><h1>Hola Mundo</h1></div>';
document.getElementById('root').innerHTML = elemento;Con JSX en React
// ¡Podemos escribir HTML directamente!
const elemento = (
<div className="contenedor">
<h1>Hola Mundo</h1>
</div>
);
ReactDOM.createRoot(document.getElementById('root')).render(elemento);Ventajas de JSX:
Auto-completado de código
Mejor detección de errores
Más legible
Integración con herramientas de desarrollo
2. Configuración Inicial del Proyecto React
Estructura de archivos inicial:
mi-proyecto-react/
├── public/
│ └── index.html
├── src/
│ ├── index.jsx
│ ├── App.jsx
│ └── index.css
└── package.jsonArchivo public/index.html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi App React</title>
</head>
<body>
<!-- Punto de entrada de nuestra aplicación -->
<div id="root"></div>
</body>
</html>3. El Archivo Principal: index.jsx
// Importamos las dependencias necesarias
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css'; // Importamos estilos
import App from './App'; // Importamos nuestro componente principal
// 1. Capturamos el elemento raíz del HTML
const rootElement = document.getElementById('root');
// 2. Creamos la raíz de React
const root = ReactDOM.createRoot(rootElement);
// 3. Renderizamos nuestra aplicación
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);Explicación paso a paso:
Paso 1: Importamos React y ReactDOM
React: La biblioteca principalReactDOM: Para interactuar con el DOMcreateRoot: Nueva API en React 18+ para crear la raíz
Paso 2: Encontramos el contenedor en el HTML
Usamos
document.getElementById('root')para encontrar nuestro div con id "root"
Paso 3: Creamos y renderizamos
ReactDOM.createRoot()crea el punto de entrada.render()muestra nuestro contenido
Importante: <React.StrictMode> es un wrapper que ayuda a detectar problemas potenciales durante el desarrollo.
4. Cambiando la Extensión a .jsx
¿Por qué usar .jsx en lugar de .js?
Claridad: Indica que el archivo contiene JSX
Herramientas: Mejor soporte en editores de código
Convención: Estándar en la comunidad React
Cómo renombrar:
Antes: index.js
Después: index.jsxNota: Después de cambiar la extensión, debemos reiniciar el servidor de desarrollo:
# Presiona Ctrl+C en la terminal
npm start
# O
yarn start5. Creando Nuestro Primer Componente: App.jsx
// App.jsx
import React from 'react';
import './App.css'; // Podemos importar estilos específicos
// Definimos nuestro componente principal
function App() {
return (
<div className="app-container">
<h1>¡Bienvenido a React!</h1>
<p>Este es mi primer componente JSX</p>
<button onClick={() => alert('¡Hola!')}>
Haz clic aquí
</button>
</div>
);
}
// Exportamos el componente
export default App;6. Diferencias Clave entre HTML y JSX
| HTML tradicional | JSX en React |
|---|---|
class | className |
for | htmlFor |
onclick | onClick |
style="color: red;" | style={{color: 'red'}} |
Comentarios <!-- --> | {/* Comentario */} |
Ejemplo de estas diferencias:
function EjemploDiferencias() {
return (
<div className="contenedor" style={{ backgroundColor: '#f0f0f0' }}>
<label htmlFor="nombre">Nombre:</label>
<input id="nombre" type="text" />
{/* Este es un comentario en JSX */}
<button onClick={() => console.log('Click!')}>
Presionar
</button>
</div>
);
}7. Ejercicio Práctico: Crear un Componente JSX
Paso 1: Crea un nuevo archivo Saludo.jsx
// Saludo.jsx
import React from 'react';
function Saludo({ nombre }) {
return (
<div className="saludo-card">
<h2>¡Hola, {nombre}!</h2>
<p>Bienvenido al mundo de JSX y React</p>
<small>Fecha: {new Date().toLocaleDateString()}</small>
</div>
);
}
export default Saludo;Paso 2: Úsalo en App.jsx
// App.jsx actualizado
import React from 'react';
import Saludo from './Saludo';
import './App.css';
function App() {
const usuarios = ['Ana', 'Carlos', 'María', 'Juan'];
return (
<div className="app-container">
<h1>Lista de Saludos</h1>
{usuarios.map((usuario, index) => (
<Saludo key={index} nombre={usuario} />
))}
<div className="contenedor-extra">
<p>Este es un ejemplo de cómo JSX nos permite mezclar JavaScript y HTML</p>
</div>
</div>
);
}
export default App;8. Consejos y Buenas Prácticas
Estructura de Carpetas Recomendada:
src/
├── components/ # Componentes reutilizables
│ ├── Button.jsx
│ ├── Card.jsx
│ └── Header.jsx
├── pages/ # Páginas completas
│ ├── Home.jsx
│ └── About.jsx
├── App.jsx # Componente principal
└── index.jsx # Punto de entradaReglas de JSX:
Solo un elemento padre: Cada componente debe retornar un solo elemento
Cerrar todas las etiquetas: Las etiquetas deben cerrarse explícitamente
className en lugar de class: Para atributos CSS
Expresiones JavaScript: Usar
{}para incluir JavaScript
Ejemplo de múltiples elementos:
// ❌ INCORRECTO
function ComponenteIncorrecto() {
return (
<h1>Título</h1>
<p>Párrafo</p>
);
}
// ✅ CORRECTO
function ComponenteCorrecto() {
return (
<div>
<h1>Título</h1>
<p>Párrafo</p>
</div>
);
}
// ✅ También correcto (usando Fragment)
function ComponenteConFragment() {
return (
<>
<h1>Título</h1>
<p>Párrafo</p>
</>
);
}9. Solución de Problemas Comunes
Problema 1: Error después de cambiar a .jsx
Solución: Reinicia el servidor de desarrollo
Ctrl + C
npm startProblema 2: El componente no se muestra
Verifica:
¿Exportaste el componente?
export default Componente¿Importaste correctamente?
import Componente from './Componente'¿Estás usando el componente?
<Componente />
Problema 3: Errores de sintaxis JSX
Recuerda:
Las etiquetas deben cerrarse:
<img />,<input />Usar
classNamenoclassLas expresiones JavaScript van entre
{}
10. Resumen Final
JSX transforma la forma en que escribimos interfaces en JavaScript:
Mezcla HTML y JavaScript de forma natural
Componentes reutilizables como bloques de construcción
Sintaxis más clara y fácil de mantener
Mejor experiencia de desarrollo con herramientas modernas
Próximos pasos recomendados:
Aprender sobre
propsystateExplorar hooks como
useStateyuseEffectCrear componentes más complejos
Aprender sobre enrutamiento con React Router
Recursos Adicionales
React DevTools - Extensión para Chrome
Create React App - Para crear nuevos proyectos
¡Felicidades! Ahora comprendes los fundamentos de JSX en React. Sigue practicando creando más componentes y explorando las posibilidades que ofrece esta poderosa herramienta.
Comentarios
Publicar un comentario