Domina los eventos en JavaScript y la manipulación del DOM con una interfaz mínima y eficaz. Verás cómo modelar un estado, renderizar texto con textContent y responder a click, hover y keydown usando addEventListener, funciones anónimas y el operador ternario. Además, se destacan buenas prácticas de nomenclatura en inglés y retornos tempranos para lógica clara.
¿Cómo gestionar estado y mensajes en JavaScript?
Modela un estado centralizado para sincronizar la UI con la interacción. Se usa un objeto state con dos claves: likes inicializado en 0 y isHovering en false. La función getStatusMessage devuelve el mensaje correcto según el contador usando comparaciones estrictas y retornos tempranos.
// Estado de la aplicaciónconst state ={likes:0,isHovering:false,};// Mensaje dinámico según likesfunctiongetStatusMessage(){if(state.likes===0)return'Aún no hay likes. Haz clic en me gusta';if(state.likes===1)return'Tienes un like. Buen inicio';return`Tienes ${state.likes} likes. Sigue así`;}
¿Qué patrones se usan para mensajes dinámicos?
Retornos tempranos para simplificar if anidados.
Comparación estricta (===) para evitar coerción de tipos.
Template literals para componer strings con variables.
Comillas simples cuando no interpolas variables. Backticks cuando sí.
¿Cómo renderizar y manipular el DOM con eventos?
Centraliza el pintado de la UI en una función render. Selecciona nodos con document.querySelector (status, button like, button reset, hover zone, hover pill, hover title, hover text). Actualiza texto, deshabilita botones y alterna clases según el estado.
functionrender(){// Selección de nodos (usa los selectores reales de tu HTML)const status =document.querySelector('/* selector de status */');const btnLike =document.querySelector('/* selector de botón like */');const btnReset =document.querySelector('/* selector de botón reset */');const hoverZone =document.querySelector('/* selector de hover zone */');const hoverPill =document.querySelector('/* selector de hover pill */');const hoverTitle =document.querySelector('/* selector de hover title */');const hoverText =document.querySelector('/* selector de hover text */');// Mensaje principal status.textContent=getStatusMessage();// Estado del botón reset btnReset.disabled= state.likes===0; btnReset.style.opacity= state.likes===0?0.55:1;// Zona de hover: clase y textos hoverZone.classList.toggle('isHover', state.isHovering); hoverPill.textContent= state.isHovering?'mouse dentro':'mouse fuera'; hoverTitle.textContent= state.isHovering?'hover detectado':'pasa el mouse por aquí'; hoverText.textContent= state.isHovering?'Este cambio se disparó por el mouse enter del DOM':'Cuando entras, sales, cambias una clase y el texto';}
Vincula eventos con addEventListener usando funciones anónimas. Incrementa, reinicia y re-renderiza. Para hover, usa mouseenter y mouseleave para activar el booleano isHovering.
functionsetupEvents(){const btnLike =document.querySelector('/* selector de botón like */');const btnReset =document.querySelector('/* selector de botón reset */');const hoverZone =document.querySelector('/* selector de hover zone */');// Click en like btnLike.addEventListener('click',function(){ state.likes+=1;render();});// Click en reset btnReset.addEventListener('click',function(){ state.likes=0;render();});// Hover dentro hoverZone.addEventListener('mouseenter',function(){ state.isHovering=true;render();});// Hover fuera hoverZone.addEventListener('mouseleave',function(){ state.isHovering=false;render();});}
¿Cómo escuchar eventos del teclado y atajos?
Para atajos globales, escucha en document el evento keydown. Con event.key.toLowerCase() filtra la tecla deseada. Si no coincide, retorna y no haces nada. Si coincide con “l”, incrementa likes y vuelve a renderizar.
Tecla filtrada con toLowerCase() para evitar problemas de mayúsculas.
Funciones anónimas: se ejecutan al dispararse el evento, sin nombre propio.
Recuerda: los errores en consola ayudan a detectar detalles como comas o paréntesis faltantes.
¿Tienes una mejora o un reto extra que sumar, por ejemplo otras teclas o combinaciones? Compártelo en los comentarios y cuéntanos cómo lo resolviste con addEventListener y un buen state centralizado.
El profesor publicó las soluciones pero no incluyó el archivo del reto. Si quieren intentar el reto de Evento del DOM sin ver las soluciones, hice el archivo del challenge con instrucciones para que puedan resolverlos.
Código aquí:
NOTA: Copia todo el contenido y reemplázalo en el archivo principal.
Añado mis notas de esta clase:
Pasos en orden del ejercicio desarrollado:
Crear la variable de status, que es un objeto que contiene likes e isHovering;
Se procede a crear la función que regresa strings para la info del mensaje, que es la cantidad de likes
Se continúa con la función de render(), que obtiene elementos del DOM con querySelector() y empieza a manipular sus valores y comportamientos, donde se puede usar if ternarios o .toggle.
Se sigue con los eventos, donde se obtienen nodos desde el DOM para trabajar con ellos. Se llaman a los botones, o hoverZone, se les añade eventos con .addEventListener(), los cuales se ejecutan con un tipo de evento como 'click', 'mouseenter', 'mouseleave', 'keydown', seguidos por una función anónima que ejecuta una arrow function para regresar un resultado llamando a la función render();
Finalmente, se llama a las funciones creadas para preparar la interfaz por primera vez para que no se vea vacía.
El orden en el que se llaman a las funciones tiene una lógica específica, adjunto lo que contestó la IA de Platzi: "
Imagina que tu código es una orquesta.setupEvents y setupKeyboardLike son los ensayos: le dicen a los músicos(los botones y el teclado) qué deben hacer cuando llegue su turno.Si no los llamas, nadie sabe qué hacer cuando el usuario interactúa.render es el concierto: es lo que el público ve.Si llamas a render antes de los ensayos, el escenario está vacío.Si los llamas en el orden correcto, la app arranca lista para reaccionar.