Misión 1 · Lección 1

Introducción a React

Objetivos

¿Qué es React?

Requisitos previos

Crear un proyecto con Vite

npm create vite@latest mi-app -- --template react
cd mi-app
npm install
npm run dev

Abre la URL que muestra la terminal para ver tu aplicación en el navegador 🚀.

Estructura básica

Misión 1 · Lección 4

Componentes Funcionales y de Clase

Objetivos

¿Qué es un Componente?

Los componentes son la piedra angular de cualquier aplicación en React. Representan piezas independientes y reutilizables de la interfaz de usuario (UI), que se combinan para formar interfaces completas.

React se basa en la idea de descomponer la UI en pequeños bloques con su propia lógica y estructura.

Concepto de Componentización

Ejemplo:

Jerarquía de Componentes

En React, los componentes se organizan en un árbol jerárquico donde los padres contienen hijos.

function App() {
  return (
    <div>
      <Header />
      <MainContent />
      <Footer />
    </div>
  );
}

Tipos de Componentes en React

Ambos pueden hacer lo mismo, pero los componentes funcionales son el estándar actual con Hooks.

Ejemplo de Componente Funcional

export default function Saludo() {
  return <h2>¡Hola desde un componente funcional!</h2>;
}

Ejemplo de Componente de Clase

import React, { Component } from "react";

class Saludo extends Component {
  render() {
    return <h2>¡Hola desde un componente de clase!</h2>;
  }
}

export default Saludo;

Reutilización y Modularidad

Una de las grandes ventajas de React es la posibilidad de reutilizar componentes.

Ejemplo: un componente <BotonEnviar /> puede reutilizarse en varios formularios.

Props y Estado

function Saludo({ nombre }) {
  return <h3>Hola, {nombre}!</h3>;
}

// Uso
<Saludo nombre="Ana" />

Las props son inmutables, mientras que el estado cambia con funciones como setState o useState.

Comparación de Tipos

Característica Funcional De Clase
Sintaxis Función JavaScript Clase ES6
Estado Hooks (useState) this.state
Ciclo de vida useEffect Métodos como componentDidMount
Popularidad Alta (actual estándar) Baja (uso legado)

Conclusión

Ejercicio Guiado 🛠️

  1. Crea un componente funcional <Saludo /> que reciba una prop nombre.
  2. Crea un componente de clase <Contador /> que tenga un estado con un número y un botón para incrementarlo.
  3. Renderiza ambos componentes dentro de App.jsx.
  4. Compara las diferencias entre el manejo del estado y las props.

Tu primer componente

// src/App.jsx
export default function App() {
  return <h1>¡Hola, React!</h1>;
}
// src/main.jsx
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App.jsx";

createRoot(document.getElementById("root")).render(
  <React.StrictMode><App /></React.StrictMode>
);

JSX básico

const nombre = "Ana";
return <h2>Hola, {nombre}</h2>;

Props (propiedades)

function Saludo({ nombre }) {
  return <p>Hola, {nombre}!</p>;
}

export default function App() {
  return <Saludo nombre="Mundo" />;
}

Las props son datos que fluyen del padre al hijo y son de solo lectura.

Estado con useState

import { useState } from "react";

export default function Contador() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(count + 1)}>
      Clics: {count}
    </button>
  );
}

El estado permite que la UI se actualice cuando cambian los datos.

Listas y condicionales

const frutas = ["🍎", "🍌", "🍊"];
return (
  <ul>{frutas.map((f, i) => <li key={i}>{f}</li>)}</ul>
);
{frutas.length === 0 
 ? <p>Sin datos</p> 
 : <p>Hay {frutas.length} frutas</p>}

Ejercicio guiado 🛠️

  1. Crea un proyecto con Vite y arráncalo.
  2. Edita App.jsx para mostrar un saludo con tu nombre.
  3. Crea un componente <Contador /> usando useState.
  4. Renderiza una lista de 3 tareas y muéstralas en pantalla.