# Construir una App Bancaria Parte 1: Plantillas HTML y Rutas en una Aplicación Web ```mermaid journey title Tu viaje de desarrollo de la aplicación bancaria section Fundamentos de SPA Entender aplicaciones de una sola página: 3: Student Aprender conceptos de plantillas: 4: Student Dominar la manipulación del DOM: 4: Student section Sistemas de enrutamiento Implementar enrutamiento del lado cliente: 4: Student Manejar el historial del navegador: 5: Student Crear sistemas de navegación: 5: Student section Patrones profesionales Construir arquitectura modular: 5: Student Aplicar mejores prácticas: 5: Student Crear experiencias de usuario: 5: Student ``` Cuando el ordenador de guía del Apolo 11 navegó a la luna en 1969, tuvo que cambiar entre diferentes programas sin reiniciar todo el sistema. Las aplicaciones web modernas funcionan de manera similar: cambian lo que ves sin recargar todo desde cero. Esto crea la experiencia fluida y receptiva que los usuarios esperan hoy en día. A diferencia de los sitios web tradicionales que recargan páginas completas en cada interacción, las aplicaciones web modernas actualizan solo las partes que necesitan cambiar. Este enfoque, parecido a cómo el control de misión cambia entre diferentes pantallas mientras mantiene comunicación constante, crea esa experiencia fluida que esperamos. Esto es lo que hace que la diferencia sea tan dramática: | Aplicaciones Tradicionales Multi-Página | Aplicaciones Modernas de Página Única | |-----------------------------------------|-------------------------------------| | **Navegación** | Recarga completa para cada pantalla | Cambio instantáneo de contenido | | **Rendimiento** | Más lento debido a descargas completas de HTML | Más rápido con actualizaciones parciales | | **Experiencia de Usuario** | Destellos bruscos de página | Transiciones suaves tipo app | | **Compartir Datos** | Difícil entre páginas | Gestión de estado fácil | | **Desarrollo** | Varias archivos HTML que mantener | Un solo HTML con plantillas dinámicas | **Entendiendo la evolución:** - Las **apps tradicionales** requieren solicitudes al servidor para cada acción de navegación - Las **SPAs modernas** cargan una vez y actualizan contenido dinámicamente usando JavaScript - Las **expectativas de los usuarios** ahora favorecen interacciones instantáneas y fluidas - Los **beneficios de rendimiento** incluyen menor uso de ancho de banda y respuestas más rápidas En esta lección construiremos una app bancaria con múltiples pantallas que fluyen juntas sin problemas. Como los científicos que usan instrumentos modulares que pueden reconfigurarse para diferentes experimentos, usaremos plantillas HTML como componentes reutilizables que se muestran según sea necesario. Trabajarás con plantillas HTML (planos reutilizables para diferentes pantallas), ruteo en JavaScript (el sistema que cambia entre pantallas) y la API de historial del navegador (que mantiene el funcionamiento esperado del botón atrás). Estas son las mismas técnicas fundamentales usadas por frameworks como React, Vue y Angular. Al final, tendrás una app bancaria funcional que demuestra principios profesionales de aplicaciones de una sola página. ```mermaid mindmap root((Aplicaciones de Página Única)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience Navegación Rápida Transiciones Suaves Estado Consistente Interacciones Modernas Performance Reducción de Solicitudes al Servidor Transiciones de Página Más Rápidas Uso Eficiente de Recursos Mejor Capacidad de Respuesta ``` ## Cuestionario Pre-Clase [Cuestionario pre-clase](https://ff-quizzes.netlify.app/web/quiz/41) ### Lo que necesitarás Necesitaremos un servidor web local para probar nuestra app bancaria — no te preocupes, ¡es más fácil de lo que parece! Si no tienes uno configurado, solo instala [Node.js](https://nodejs.org) y ejecuta `npx lite-server` desde la carpeta de tu proyecto. Este comando útil levanta un servidor local y abre automáticamente tu app en el navegador. ### Preparación En tu computadora, crea una carpeta llamada `bank` con un archivo llamado `index.html` dentro. Partiremos de este [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code) HTML: ```html Bank App ``` **Esto es lo que proporciona este boilerplate:** - **Establece** la estructura del documento HTML5 con la declaración DOCTYPE adecuada - **Configura** la codificación de caracteres como UTF-8 para soporte internacional - **Habilita** diseño responsivo con la etiqueta meta viewport para compatibilidad móvil - **Define** un título descriptivo que aparece en la pestaña del navegador - **Crea** un cuerpo limpio donde construiremos nuestra aplicación > 📁 **Vista previa de estructura del proyecto** > > **Al final de esta lección, tu proyecto contendrá:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Responsabilidades de archivos:** > - **index.html**: Contiene todas las plantillas y provee la estructura de la app > - **app.js**: Maneja ruteo, navegación y gestión de plantillas > - **Plantillas**: Definen la interfaz para login, panel y otras pantallas --- ## Plantillas HTML Las plantillas resuelven un problema fundamental en el desarrollo web. Cuando Gutenberg inventó la imprenta de tipos móviles en los años 1440, se dio cuenta que en vez de tallar páginas enteras, podía crear bloques de letras reutilizables y armarlos según necesitara. Las plantillas HTML funcionan con el mismo principio: en vez de crear diferentes archivos HTML para cada pantalla, defines estructuras reutilizables que se muestran cuando es necesario. ```mermaid flowchart TD A["📋 Definición de Plantilla"] --> B["💬 Oculto en el DOM"] B --> C["🔍 JavaScript Encuentra la Plantilla"] C --> D["📋 Clonar Contenido de la Plantilla"] D --> E["🔗 Adjuntar al DOM Visible"] E --> F["👁️ Usuario Ve el Contenido"] G["Plantilla de Inicio de Sesión"] --> A H["Plantilla del Tablero"] --> A I["Plantillas Futuras"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Piensa en las plantillas como planos para diferentes partes de tu app. Así como un arquitecto crea un plano una vez y lo usa múltiples veces en lugar de dibujar habitaciones idénticas cada vez, creamos plantillas una vez y las instanciamos según la necesidad. El navegador mantiene estas plantillas ocultas hasta que JavaScript las activa. Si quieres crear múltiples pantallas para una página web, una solución sería crear un archivo HTML por cada pantalla que deseas mostrar. Pero esta solución tiene algunas molestias: - Tienes que recargar todo el HTML al cambiar de pantalla, lo cual puede ser lento. - Es difícil compartir datos entre las diferentes pantallas. Otra forma es tener solo un archivo HTML, y definir múltiples [plantillas HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) usando el elemento `