Material de refuerzo para bootcamp — primera toma de contacto con React.
React es una librería de JavaScript para construir interfaces de usuario (UIs). Creada por Meta (Facebook), se usa para:
- Crear páginas web interactivas (SPAs, dashboards, apps)
- Dividir la interfaz en piezas reutilizables llamadas componentes
- Actualizar solo lo que cambia en pantalla (DOM virtual)
No es un framework completo: no incluye rutas, estado global ni HTTP. Se centra en “la vista” y se combina con otras herramientas (Vite, React Router, etc.).
| Concepto | En una frase |
|---|---|
| Componente | Función (o clase) que devuelve lo que se pinta |
| JSX | HTML dentro de JavaScript |
| Props | Datos que pasas de un componente a otro (solo lectura) |
| Estado | Datos que cambian con el tiempo (useState) |
07.1.react_refuerzo/
├── index.html → Página única; dentro hay <div id="root"></div>
├── src/
│ ├── main.jsx → Punto de entrada: “engancha” React al div#root
│ ├── App.jsx → Componente principal (donde empezamos a programar)
│ ├── App.css → Estilos del App
│ └── index.css → Estilos globales
└── package.json → Dependencias (react, react-dom, vite)
Flujo:
index.html carga main.jsx → main.jsx hace createRoot(...).render(<App />) → React pinta App dentro de #root.
Comando para desarrollar:
npm run devUn componente en React es una función que devuelve JSX (parecido a HTML).
Ejemplo mínimo:
function Saludo() {
return <h1>Hola, bootcamp</h1>
}
export default Saludo- El nombre del componente va en PascalCase.
- Lo que devuelve se escribe en JSX: etiquetas como en HTML, pero dentro de
.jsx. classNameen lugar declass, y otras reglas de JSX que veremos.
- Escribes HTML dentro de JavaScript.
- Una sola raíz: si devuelves varias etiquetas, envuélvelas en un padre, por ejemplo
<div>...</div>o<></>(fragmento). - Atributos:
class→className,for→htmlFor. - JavaScript dentro de JSX: usa
{ }.
const nombre = "Alumnos"
return (
<div>
<h1>Hola, {nombre}</h1>
<p>2 + 2 = {2 + 2}</p>
</div>
)Las props son argumentos que recibe un componente. Son solo lectura.
function TarjetaUsuario({ nombre, rol }) {
return (
<div className="tarjeta">
<h3>{nombre}</h3>
<p>{rol}</p>
</div>
)
}
// Uso:
<TarjetaUsuario nombre="Ana" rol="Estudiante" />
<TarjetaUsuario nombre="Luis" rol="Profesor" />El componente no modifica nombre ni rol; solo los muestra.
Cuando algo cambia con el tiempo (clicks, formularios, listas), usamos estado.
import { useState } from 'react'
function Contador() {
const [numero, setNumero] = useState(0) // valor inicial 0
return (
<div>
<p>Has hecho click {numero} veces</p>
<button onClick={() => setNumero(numero + 1)}>Sumar</button>
</div>
)
}useState(0)devuelve:[valorActual, funciónParaCambiarlo].- Solo se debe cambiar el estado con
setNumero(nuncanumero = ...). - Al llamar a
setNumero, React vuelve a pintar el componente con el nuevo valor.
En tu proyecto, App.jsx ya tiene un ejemplo así con el contador.
En src/App.jsx tienes algo parecido a esto:
import { useState } from 'react'
// ...
function App() {
const [count, setCount] = useState(0)
return (
<>
{/* ... logos ... */}
<button onClick={() => setCount((count) => count + 1)}>
count is {count}
</button>
</>
)
}countes el estado (número de clicks).setCountlo actualiza; al hacer click, se suma 1.{count}en el JSX muestra el valor actual.
- Crea una variable
mensaje = "Bienvenidos a React"y muéstrala dentro de un<h1>.
- Crea un componente
Saludoque reciba la propnombrey muestreHola, {nombre}. - En
App, usa<Saludo nombre="tu nombre" />al menos dos veces con nombres distintos.
- Ya tienes un contador; modifícalo para que tenga también un botón “Restar” que reste 1 al estado.
- Que el contador no baje de 0 ni suba de 10 (deshabilitar o no hacer nada si ya está en el límite).
- React = librería para construir la UI con componentes.
- Componente = función que devuelve JSX.
- JSX = “HTML” en JavaScript; una raíz,
className, y{ }para expresiones. - Props = datos que pasas a un componente (solo lectura).
- Estado = datos que cambian; se usa
useStatey la función setter para actualizar.
En la siguiente clase se pueden ver: más hooks (useEffect), listas y keys, y formularios controlados.