Clase 15 — Taller: React + Git para la Actividad Grupal
Resumen Ejecutivo
Sesión práctica (taller, 1h 24m) de introducción a React y Git orientada a la actividad grupal. Se crea un proyecto React con Vite, se explican los conceptos fundamentales (componentes funcionales, JSX, props, estado, fragmentos), y se repasa el flujo básico de Git para trabajar en equipo. La sesión es eminentemente práctica con demostración en directo.
Conceptos Clave
- Vite: herramienta de construcción que soporta React, Vue, Svelte, etc. Más rápida que Create React App. Comando:
npm create vite@latest - Componente funcional: función JavaScript que retorna JSX. Unidad básica de construcción en React.
- JSX: sintaxis similar a HTML compilada a JavaScript. Más estricta que HTML: hay que cerrar todas las etiquetas, usar
classNameen vez declass. - Único elemento raíz: cada componente debe retornar un único elemento raíz. Usar
<div>o fragmento<>...</>para envolver varios elementos. - Expresiones en JSX: cualquier JavaScript debe ir entre llaves
{}. - Props: parámetros que se pasan a un componente como atributos. Son inmutables en el componente hijo.
- Estado (
useState): valor que puede cambiar y que al hacerlo re-renderiza el componente. - Git workflow básico: init → add → commit → branch → merge/rebase.
Desarrollo del Temario
1. Crear un proyecto React con Vite
npm create vite@latest demo-react
# Seleccionar: React → JavaScript
cd demo-react
npm install
npm run dev
Estructura generada:
demo-react/
src/
App.jsx ← componente raíz
main.jsx ← punto de entrada
index.html
vite.config.js
package.json
2. Componentes funcionales y JSX
Un componente es una función que retorna JSX:
// Componente simple
function MyButton() {
return <button>Haz clic</button>;
}
// Componente que incluye otro componente
function App() {
return (
<div>
<h1>Mi aplicación</h1>
<MyButton /> {/* componente propio → etiqueta personalizada */}
</div>
);
}
3. Reglas de JSX
| Regla | Detalle |
|---|---|
| Elemento raíz único | Todo el JSX retornado debe estar dentro de un único nodo |
| Fragmento | <>...</> si no queremos un <div> extra en el DOM |
className |
En JSX, los atributos CSS usan className en vez de class |
| Etiquetas cerradas | <br />, <input /> — siempre con / de cierre |
| Expresiones | JavaScript dentro de JSX va entre {}: {variable}, {fn()} |
function Avatar({ user }) {
return (
<img
className="avatar"
src={user.imageUrl} {/* variable entre llaves */}
alt={user.name}
/>
);
}
4. Props y estado
// Props: datos que pasan del padre al hijo (inmutables en el hijo)
function Greeting({ name }) {
return <h1>Hola, {name}</h1>;
}
// Uso: <Greeting name="Pablo" />
// Estado: datos propios del componente que cambian con el tiempo
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0); // [valor, setter]
return (
<>
<p>Contador: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</>
);
}
Regla clave: al llamar al setter (setCount), React re-renderiza el componente automáticamente.
5. Git — flujo básico de trabajo en equipo
# Inicializar repositorio
git init
git add .
git commit -m "Initial commit"
# Crear rama de feature
git checkout -b feature/mi-componente
# Trabajar, añadir cambios
git add src/components/MiComponente.jsx
git commit -m "Add MiComponente"
# Integrar en main
git checkout main
git merge feature/mi-componente
# Subir al remoto (GitHub/GitLab)
git remote add origin <url>
git push -u origin main
Recomendación: una rama por feature/alumno, merge mediante Pull Request para revisión.
6. Actividad Grupal — React + Cypress
- El repositorio base usa Vite + React.
- Cypress se integra para pruebas E2E:
npm install cypress --save-dev. - Cada equipo debe implementar al menos una feature con su test Cypress correspondiente.
- Recursos recomendados: Quick Start de React (react.dev) y la guía sencilla de Git.
Preguntas Tipo Examen
- ¿Qué es un componente funcional en React?
- ¿Cuál es la diferencia entre
classyclassNameen JSX? - ¿Por qué cada componente React debe retornar un único elemento raíz? ¿Cómo se resuelve sin añadir un
<div>? - ¿Qué son las props en React y cómo se diferencian del estado (
useState)? - ¿Para qué sirve Vite en un proyecto React?
- Describe los pasos básicos para crear una rama de feature en Git y fusionarla con
main.