Manejo de Errores en Local Storage para Tareas Dinámicas

Clase 25 de 27Curso de JavaScript: Manipulación del DOM

Contenido del curso

Manipulando Elementos del DOM

Creando un Administrador de Tareas

Resumen

Cuando trabajas con un task manager dinámico y notas que cada vez que editas o refrescas la página aparecen tareas duplicadas llamadas "task contents", estás frente a un bug muy común relacionado con código hardcodeado en HTML y la forma en que se actualiza el local storage. Entender por qué ocurre y cómo resolverlo es fundamental para que tu aplicación funcione correctamente.

¿Por qué aparecen tareas duplicadas al editar y refrescar?

El problema tiene su origen en dos elementos que entran en conflicto. Por un lado, existe código hardcodeado en el HTML [0:10] que incluye una tarea de ejemplo para que, al iniciar el task manager, al menos haya un elemento visible. Por otro lado, la función de update local storage [1:04] realiza un escaneo de todas las etiquetas <li> que existen en el DOM en ese momento y guarda esa "radiografía actual" en local storage.

El conflicto funciona así:

  • Al editar una tarea, la función de update copia el texto de todos los <li> actuales, incluyendo el que está hardcodeado.
  • Cuando haces refresh, el HTML vuelve a cargar el elemento hardcodeado.
  • Además, local storage inyecta las tareas que tenía guardadas.
  • El resultado: la tarea hardcodeada se duplica con cada ciclo de edición y refresco.

Este ciclo se repite indefinidamente. Cada vez que editas, la radiografía crece porque incluye tanto el elemento fijo del HTML como las tareas almacenadas previamente [2:10].

¿Qué significa código hardcodeado en este contexto?

Cuando se dice que algo está hardcodeado, significa que el contenido no se genera de forma dinámica mediante JavaScript, sino que está escrito directamente en el archivo HTML. En este caso, la tarea "task contents" existía como ejemplo visual estático. Al pasar a una página dinámica donde las tareas se crean y gestionan con JavaScript, ese elemento fijo ya no tiene sentido y genera conflictos.

¿Cómo se corrige el bug de local storage?

La solución es sencilla y directa [2:40]:

  • Eliminar el código hardcodeado del HTML.
  • Dejar únicamente el contenedor vacío donde se inyectarán las tareas de forma dinámica.
  • Borrar los registros duplicados de "task contents" que quedaron almacenados en local storage.

Una vez que el contenedor está limpio, la radiografía inicial solo contiene las tareas reales que el usuario ha creado. Por ejemplo, si tienes "tarea uno" y "tarea dos modificada", esas serán las únicas que el escaneo de <li> capturará [3:05].

¿Cómo verificar que el problema quedó resuelto?

Después de aplicar la corrección, puedes comprobarlo con estos pasos:

  • Edita cualquier tarea existente y guarda los cambios.
  • Refresca la página con refresh.
  • Revisa que solo aparezcan las tareas que creaste, sin duplicados.
  • Inspecciona el contenido de local storage en las herramientas de desarrollo del navegador para confirmar que no hay entradas repetidas.

Al refrescar [3:25], el escaneo ahora solo detecta los <li> actuales (los que realmente importan) y eso es exactamente lo que se guarda. Ya no hay elemento hardcodeado que se sume a la lista.

Este tipo de bug es un recordatorio importante: cuando transicionas de una página estática a una dinámica, asegúrate de limpiar todo el contenido de ejemplo que ya no forma parte del flujo de datos de tu aplicación. Si te ha pasado algo similar o tienes otra forma de resolverlo, comparte tu experiencia.