El método
- ¿Qué información necesito para pintar esto? Ese es el estado
- ¿Qué acciones lo cambian? Esos son los eventos
- ¿Cómo se ve el estado? Esa es la función de render
- ¿Qué pasa mientras carga, si falla, y si no hay nada?
Para depurar:
- ¿Llega el evento?
- Si no: ¿existe el elemento? ¿se creó después?
- Si sí: ¿los datos son los que crees, y del tipo que crees?
- ¿El estado es correcto y el fallo está solo al pintar?
La idea más importante
Los datos mandan; la página es su reflejo. Cuando algo cambia, cambia el estado y se vuelve a pintar.
De ahí sale todo lo demás: por eso no se lee el DOM para tomar decisiones, por eso el render es idempotente, por eso se delegan los eventos, y por eso la lógica de la UD3 sigue sin saber que existe una página.
No memorices el DOM
- ¿Qué información necesita esta vista para existir?
- ¿Dónde vive la verdad de este dato?
- ¿Esto lo estoy leyendo del DOM en vez de del estado?
- ¿Este elemento existía cuando registré la escucha?
- ¿De qué tipo llega este valor de verdad?
- ¿Qué se ve mientras esto carga? ¿Y si falla? ¿Y si está vacío?
- ¿Esto se puede hacer sin ratón?
- ¿Dónde queda el foco después de este cambio?
- ¿Se entera de esto quien no ve la pantalla?
Al terminar deberías poder responder
- ¿Qué es el DOM y en qué se diferencia de tu fichero HTML?
- ¿Por qué el código debe esperar a que el documento exista?
- ¿Qué devuelve
querySelectorcuando no encuentra nada? ¿YquerySelectorAll? - ¿Por qué seleccionamos con atributos
data-y no con clases de CSS? - ¿Por qué
textContentes la opción por defecto frente ainnerHTML? - ¿Por qué JavaScript pone clases en vez de estilos?
- ¿Qué tres piezas tiene una escucha de eventos?
- ¿Por qué se escucha
submiten el formulario y no el clic del botón? - ¿Qué hace
preventDefault? - ¿Qué diferencia hay entre
targetycurrentTarget? - ¿Qué es el burbujeo y para qué sirve?
- ¿Qué ventajas tiene delegar eventos?
- ¿Para qué sirve
closest? - ¿Por qué se insertan los elementos con un fragmento?
- ¿Qué significa que un render sea idempotente?
- ¿Qué debe mostrar una lista vacía?
- ¿De qué tipo es el valor de un campo de formulario?
- ¿Qué recoge
FormDatay de qué depende? - ¿Qué tres validaciones existen y cuál es obligatoria?
- ¿Qué hacen
aria-describedby,aria-invalidyrole="alert"? - ¿Qué es el estado de una interfaz y por qué debe ser único?
- ¿Qué hacen exactamente tus manejadores de eventos?
- ¿Qué es un debounce y cuándo hace falta?
- ¿Para qué sirve
aria-live? - ¿Qué guarda
localStoragey qué no debe guardarse ahí? - ¿Por qué se lee lo guardado dentro de un
try/catch? - ¿Por qué JavaScript no espera a las operaciones lentas?
- ¿Qué es una promesa y qué dos finales tiene?
- ¿Qué hace
awaity dónde puede escribirse? - ¿Por qué un 404 no rechaza la promesa de
fetch? - ¿Cuáles son los cuatro estados de una carga?
- ¿Qué es un error de CORS y dónde se resuelve?
- ¿Dónde debe quedar el foco tras volver a pintar?
El vocabulario de la unidad
| Concepto | Significa |
|---|---|
| DOM | El documento convertido en árbol de objetos en memoria |
| Nodo / elemento | Cualquier pieza del árbol / las que son etiquetas |
NodeList |
Lo que devuelve una selección múltiple; no es un array |
dataset |
Acceso a los atributos data-, siempre como texto |
| Evento | Algo que ocurre y a lo que se puede reaccionar |
| Manejador | La función que se ejecuta cuando ocurre |
| Burbujeo | El ascenso del evento por el árbol hasta el documento |
| Delegación | Escuchar en el contenedor y filtrar por el origen |
| Fragmento | Un contenedor temporal para insertar de una vez |
| Render | Generar la página a partir de los datos |
| Idempotente | Que ejecutarlo dos veces deje el mismo resultado |
| Estado | Todo lo necesario para saber cómo debe verse la interfaz |
| Fuente de verdad | El único sitio donde vive un dato |
| Debounce | Agrupar una ráfaga de eventos en una sola ejecución |
| Región activa | Zona cuyos cambios anuncia el lector de pantalla |
localStorage |
Almacén de texto del navegador, persistente |
| Asíncrono | Que su resultado llega después, sin bloquear |
| Bucle de eventos | El mecanismo que ejecuta lo que quedó en cola |
| Promesa | Un valor futuro, que se cumple o se rechaza |
fetch |
La forma de pedir datos a un servidor |
| CORS | La política del navegador sobre peticiones a otro origen |
La siguiente unidad
Tu web ya se comporta como una aplicación: pinta desde datos, reacciona, valida, recuerda y pide información a un servidor.
A un servidor que no es tuyo.
- Cliente · lo que ya sabes
- HTTP · lo que viaja
- Servidor · lo que viene
En el tercer trimestre el mismo lenguaje se sale del navegador. Con Node.js escribirás programas que leen ficheros, atienden peticiones y responden; y en la UD6 construirás la API que hoy estás consumiendo. La /api/productos que has llamado con fetch la vas a escribir tú.
Ya deberías ser capaz de
- Explicar qué es el DOM y en qué se diferencia del fichero HTML que escribiste.
- Seleccionar elementos con precisión y sin depender de la posición que ocupan.
- Modificar contenido, clases y atributos sin reescribir la estructura de la página.
- Responder a lo que hace la persona usuaria con eventos, y usar delegación cuando el contenido es dinámico.
- Generar la interfaz a partir de un array de datos, en lugar de escribirla a mano.
- Mantener una única fuente de verdad y volver a pintar cuando el estado cambia.
- Validar un formulario desde JavaScript sin romper la accesibilidad ni la validación nativa.
- Guardar preferencias en el navegador y recuperarlas al volver.
- Consumir una API con fetch y async/await, tratando la carga, el error y la lista vacía.
- Depurar una interfaz distinguiendo un fallo del evento de un fallo de la lógica.