Landing de productos con Fake API en JavaScript

Clase 36 de 39Curso de Fundamentos de JavaScript

Contenido del curso

Fundamentos Javascript

Funciones, Scope y Estructuras de Datos

Resumen

Crear una landing de productos con JavaScript es más simple de lo que parece cuando se conecta a una Fake API. Aquí se integran manipulación del DOM, funciones utilitarias, y async/await para cargar y renderizar tarjetas de producto con imagen, título y precio de forma clara y optimizada.

¿Cómo estructurar el proyecto y preparar el DOM?

Antes de programar, se propone una estructura mínima: carpeta Async, archivo index.html con CSS y zonas identificadas por IDs. Luego, en app.js se referencian los nodos clave para controlar el flujo de datos y la interfaz.

  • Crear carpeta Async e index.html con estilos y secciones base.
  • Añadir app.js y enlazarlo desde el HTML.
  • Definir variables globales al inicio: API_URL, grid y status_text.
  • Usar querySelector con IDs definidos en el HTML.
// Configuración base const API_URL = 'URL_DE_LA_FAKE_API_DE_PRODUCTOS'; // Referencias al DOM const grid = document.querySelector('#grid-productos'); const status_text = document.querySelector('#status'); // Estado de carga y mensajes function setStatus(message) { status_text.textContent = message; }

¿Cómo actualizar el estado en la interfaz?

Con una función simple se comunica el flujo al usuario: cargando, error o listo. Esto brinda claridad y permite sumar un indicador visual después.

¿Qué funciones utilitarias mejoran el formateo y las imágenes?

Para mantener el código claro, se crean utilerías: formateo de precios y obtención de la imagen principal. La API entrega un arreglo de imágenes y solo se usa la primera.

  • format_price: añade el símbolo de dinero con template strings.
  • getProductImage: retorna product.images[0] para mostrar la primera imagen.
  • Recomendación comentada: convertir de dólares a pesos colombianos con una función adicional si se requiere.
function format_price(price) { return `$${price}`; // utilería simple; se puede extender a COP si aplica } function getProductImage(product) { return product.images[0]; }

¿Cómo construir una card de producto accesible y optimizada?

La tarjeta combina semántica, rendimiento y seguridad: etiqueta article, imagen con lazy loading, referrerPolicy y crossOrigin, título h3 y precio en p. Se evita cargar imágenes fuera de pantalla y se minimizan conflictos al trabajar localmente.

function createProductCard(product) { const card = document.createElement('article'); card.className = 'card'; const img = document.createElement('img'); img.className = 'product-image'; img.src = getProductImage(product); img.alt = product.title; img.loading = 'lazy'; img.referrerPolicy = 'no-referrer'; img.crossOrigin = 'anonymous'; const title = document.createElement('h3'); title.textContent = product.title; const price = document.createElement('p'); price.className = 'price'; price.textContent = format_price(product.price); card.append(img, title, price); return card; }

¿Cómo cargar y renderizar productos con fetch y async/await?

Se implementa un flujo robusto con try/catch: se actualiza el estado, se hace fetch a la API_URL, se parsea a JSON y se limita el listado con slice(0, 9) para mostrar solo los primeros nueve productos. Luego se renderiza el grid y se limpia el estado.

  • fetch + async/await: llamado asíncrono claro y legible.
  • response.json(): transforma la respuesta para iterarla.
  • slice(0, 9): controla cuántos ítems se muestran.
  • for...of: itera productos y montas nodos con append.
  • Manejo de errores: mensaje de estado cuando falla la carga.
function renderProducts(products) { grid.innerHTML = ''; for (const product of products) { const card = createProductCard(product); grid.append(card); } } async function loadProducts() { try { setStatus('Cargando productos.'); const response = await fetch(API_URL); const products = await response.json(); const firstNine = products.slice(0, 9); renderProducts(firstNine); setStatus(''); } catch (error) { console.error(error); setStatus('No se logró cargar los productos.'); } } // Inicializar loadProducts();

¿Cómo ver el resultado en el navegador con live server?

Se sugiere abrir index.html con Live Server desde el editor para observar el grid renderizado y la solicitud en tiempo real a la Fake API. Así validas que el DOM se actualiza con las cards, imágenes, títulos y precios.

¿Tienes dudas o quieres proponer mejoras al flujo de carga o al formateo de precios? Comparte tus ideas en los comentarios.