circle-info
Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 9: Integración con el DOM

Ahora que sabes trabajar con APIs asincrónicas (Tema 15), es hora de integrarlas con la manipulación del DOM (Tema 14). Este capítulo cubre el patrón completo: Fetch → Procesar → Renderizar.

9.1. Patrón: Fetch → Procesar → Renderizar

Este es el ciclo típico en aplicaciones web modernas:

  1. Fetch: Obtener datos de una API

  2. Procesar: Transformar/validar los datos

  3. Renderizar: Mostrar en el DOM

// HTML
// <div id="app">
//   <button id="cargar">Cargar datos</button>
//   <div id="contenido"></div>
// </div>

async function cargarYMostrar() {
    try {
        // 1. FETCH: Obtener datos
        const respuesta = await fetch("/api/usuarios");
        
        if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}`);
        
        const usuarios = await respuesta.json();
        
        // 2. PROCESAR: Transformar si es necesario
        const usuariosFormateados = usuarios.map(u => ({
            ...u,
            nombreCompleto: `${u.nombre} ${u.apellido}`
        }));
        
        // 3. RENDERIZAR: Mostrar en el DOM
        const contenido = document.querySelector("#contenido");
        contenido.innerHTML = usuariosFormateados
            .map(u => `<div class="usuario"><h3>${u.nombreCompleto}</h3></div>`)
            .join("");
        
    } catch (error) {
        console.error("Error:", error);
        document.querySelector("#contenido").innerHTML = 
            `<p class="error">Error cargando datos: ${error.message}</p>`;
    }
}

// Llamar al hacer clic
document.querySelector("#cargar").addEventListener("click", cargarYMostrar);

9.2. Indicadores de carga (Loading spinners)

Es importante mostrar feedback visual mientras se cargan los datos:

CSS para el spinner:


9.3. Manejo de errores en la UI

Mostrar errores de forma clara al usuario:

CSS para errores:


9.4. Actualizar la UI en tiempo real

A veces quieres actualizar solo partes del DOM sin recargar todo:

CSS para notificaciones:


9.5. Patrón práctico: Lista con CRUD

Combinar todo para una lista funcional:


Resumen del Capítulo

Integrar Fetch con el DOM es donde la programación asincrónica cobra sentido. El patrón Fetch → Procesar → Renderizar es fundamental. Siempre proporciona feedback visual (spinners, errores) para una buena experiencia de usuario.

💡 Conceptos Clave:

  • Patrón F→P→R: Fetch, Procesar, Renderizar

  • Spinners: Indicadores de carga

  • Manejo de errores UI: Mostrar errores de forma clara

  • Actualización parcial: Modificar solo lo necesario

  • Delegación de eventos: Manejar dinámicamente elementos nuevos

  • Notificaciones: Feedback de éxito/error

  • CRUD en DOM: Agregar, leer, actualizar, eliminar

  • finally: Limpiar spinners siempre

🤔 Preguntas de Reflexión:

  1. ¿Por qué es importante mostrar un spinner durante la carga?

  2. ¿Cómo actualizarías solo un elemento en el DOM sin recargar todo?

  3. ¿Cuándo usarías delegación de eventos con datos remotos?

  4. ¿Cómo mostrarías un mensaje de error útil al usuario?

  5. ¿Qué diferencia hay entre map() y forEach() al renderizar?

  6. Crea una lista CRUD completa con una API.


Última actualización

¿Te fue útil?