Saltar al contenido
Curso de React
Todos los cursos

Ejercicio: Componentes y props

  • ⏱ 25 minutos
  • 📶 Nivel: principiante

Objetivo

Construir un componente Producto configurable con props y un contenedor Lote que use children.

Cómo se trabaja

Escribe un componente llamado App (puedes crear los demás que necesites). Prueba tu código en el editor de abajo; cuando funcione, pega todo el archivo en el comprobador. Los import de react se aceptan y se ignoran, porque aquí React ya está cargado.

⚛️ Tu editor de React (empieza desde aquí)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: dos decimales

Usa precio.toFixed(2) dentro de las llaves.

💡 Pista 2: mostrar solo si hay oferta

Escribe {enOferta && <span className="oferta">¡Oferta!</span>} dentro del <h3>.

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista.

    ✅ Ver una solución posible

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    App.jsx
    function Producto({ nombre, precio, enOferta = false, moneda = "$" }) {
      return (
        <article className="producto">
          <h3>
            {nombre} {enOferta && <span className="oferta">¡Oferta!</span>}
          </h3>
          <p className="precio">{moneda}{precio.toFixed(2)}</p>
        </article>
      );
    }
    
    function Lote({ titulo, children }) {
      return (
        <section className="lote">
          <h2>{titulo}</h2>
          {children}
        </section>
      );
    }
    
    export default function App() {
      return (
        <Lote titulo="Oficina">
          <Producto nombre="Teclado" precio={25} enOferta />
          <Producto nombre="Mouse" precio={12.5} />
          <Producto nombre="Monitor" precio={180} enOferta />
        </Lote>
      );
    }

    💡 🏁 Reto extra (opcional)

    Añade una prop descuento (un número, por ejemplo 20) y, si existe, muestra el precio nuevo tachado junto al precio original.