UATFCAV
DESARROLLO DE APLICACIONES WEB · UNIDAD 4 · TEMA 4.1

Arquitectura
basada en componentes

Construir interfaces como piezas que se combinan, se reutilizan y se mantienen por separado

Dr. Juan Carlos de la Cruz MaldonadoLicenciatura en Tecnologías de la Información · Periodo 2026-3
1 / 10
UATFCAV
Momento 1 · El dilema

La misma tarjeta, copiada 14 veces

14 copias

de la tarjeta de producto en catálogo, ofertas, búsqueda y carrito

2 olvidos

al agregar la etiqueta «Agotado»: el cliente compró lo que no había

catalogo.html, ofertas.html, carrito.html...
<!-- catalogo.html -->
<div class="tarjeta">
  <h3>Martillo 16 oz</h3>
  <p class="precio">$189.00</p>
</div>

<!-- ofertas.html (copia) -->
<div class="tarjeta">
  <h3>Martillo 16 oz</h3>
  <p class="precio">$169.00</p>
</div>
<!-- ...y 12 copias más -->
Caso simulado: Ferretería del Norte, Cd. Victoria. ¿Y si la tarjeta existiera una sola vez?
2 / 10
UATFCAV
Momento 2 · Fundamento

Un componente = estructura + estilos + lógica

E

Estructura

Qué se muestra

  • El marcado de la pieza (JSX en React)
  • Recibe datos y los coloca en su lugar
E

Estilos

Cómo se ve

  • CSS propio de la pieza
  • No debe romper el diseño de otras piezas
L

Lógica

Cómo se comporta

  • Responde a eventos (clic, escribir)
  • Decide qué mostrar según los datos
EncapsuladoReutilizableComponible
3 / 10
UATFCAV
Momento 2 · Fundamento

Piensa en árbol: la página de la ferretería

App
Encabezado
Catalogo
Carrito
Filtro
ListaProductos
TarjetaProducto
TarjetaProducto
TarjetaProducto
Se escribe una vez,
se usa muchas veces.
4 / 10
UATFCAV
Momento 2 · Fundamento

Anatomía de un componente en React

TarjetaProducto.jsx
1function TarjetaProducto(2{ producto }) {
3  const agotado = producto.stock === 0;

4  return (
    <article className="tarjeta">
      <h3>{producto.nombre}</h3>
      <p className="precio">${producto.precio}</p>
      {agotado && <span className="badge">Agotado</span>}
    </article>
  );
}
  1. 1

    Una función con mayúscula

    Así React sabe que es un componente y no una etiqueta HTML.

  2. 2

    Recibe props

    Los datos llegan desde el componente padre.

  3. 3

    Lógica

    Decide antes de dibujar: ¿está agotado?

  4. 4

    Devuelve JSX

    Estructura con valores entre llaves.

5 / 10
UATFCAV
Momento 3 · Caso práctico

Componer: la lista usa la tarjeta

ListaProductos.jsx
function ListaProductos({ productos }) {
  return (
    <section className="lista">
      {productos.map(p => (
        <TarjetaProducto
          key={p.id}
          producto={p}
        />
      ))}
    </section>
  );
}

// productos llega desde la API del
// back-end MVC de la Unidad 3
6 / 10
UATFCAV
Momento 3 · Caso práctico

Los datos bajan, los eventos suben

PadreListaProductos
props: producto, onAgregar
evento: onAgregar(producto)
HijoTarjetaProducto
Padre e hijo
// En el padre: entrega datos y una función
<TarjetaProducto
  producto={p}
  onAgregar={agregarAlCarrito}
/>

// En el hijo: solo avisa
<button onClick={() => onAgregar(producto)}>
  Agregar
</button>
7 / 10
UATFCAV
Momento 4 · Debate

¿Cuántos componentes ves en esta pantalla?

Buscar productos...Carrito (3)

Criterios para decidir

  1. ¿Se repite? Si aparece varias veces, es candidato.
  2. ¿Tiene una responsabilidad propia? Buscar, filtrar, mostrar un producto.
  3. ¿Cambia por su cuenta? Si se actualiza sin el resto, sepáralo.

En equipos, 5 minutos: dibujen el árbol y defiendan su número.

5:00
8 / 10
UATFCAV
Momento 5 · Síntesis

Tres ideas para llevarte

01

Piezas completas

Un componente encapsula su estructura, sus estilos y su lógica.

02

Árbol y props

La interfaz es un árbol: los datos bajan por props y los eventos suben.

03

Regla práctica

Si lo copias dos veces, probablemente es un componente.

Para profundizar: Banks, A., y Porcello, E. (2020). Learning React. O'Reilly.

9 / 10
UATFCAV
Momento 5 · Actividad

Actividad: el árbol de tu proyecto integrador

1

Elige la pantalla principal de tu proyecto integrador.

2

Dibuja su árbol de componentes (mínimo 6) y marca cuáles se repiten.

3

Para cada componente anota qué props recibe y qué eventos avisa.

4

Entrega el diagrama y tu declaración de uso de IA (herramienta y prompts).

Esta semana: segundo examen parcial, según el programa.
Criterio (%)ExcelenteBuenoBásicoInsuficiente
Identificación (25)6+ componentes bien delimitadosUno mal delimitadoMenos de 6Sin componentes claros
Jerarquía (25)Árbol correcto y completoUn nivel confusoVarias relaciones malSin árbol
Props y eventos (25)Todos documentadosFaltan algunosSolo propsNo documenta
Reutilización y entrega (25)Repetidos marcados; IA declaradaMarca la mayoríaNo marca repetidosEntrega incompleta

Niveles: Excelente 100 % · Bueno 80 % · Básico 60 % · Insuficiente 0–40 % del valor del criterio

10 / 10