Capítulo 9: Integración con el DOM
9.1. Patrón: Fetch → Procesar → Renderizar
// 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)
9.3. Manejo de errores en la UI
9.4. Actualizar la UI en tiempo real
9.5. Patrón práctico: Lista con CRUD
Resumen del Capítulo
💡 Conceptos Clave:
🤔 Preguntas de Reflexión:
Última actualización
¿Te fue útil?