Aprende a implementar un sistema de persistencia para tus notas usando local storage en JavaScript. Verás cómo guardar y cargar datos con JSON.stringify y JSON.parse, aplicar validaciones para evitar errores y documentar funciones con formato yesdoc. Además, integra Prettier para mantener un código limpio, consistente y fácil de leer.
¿Cómo implementar la persistencia con local storage?
Construir la persistencia implica definir una clave de almacenamiento global, crear funciones para guardar y leer desde local storage y asegurar datos válidos. El flujo se apoya en JSON para serializar y parsear la información.
¿Qué clave de almacenamiento usar en local storage?
Define una variable global para reutilizarla en todo el proyecto.
Usa un nombre claro y estable para identificar las notas.
// Clave global para el almacenamiento en localStorageconst storageKey ='markdown-notes';
¿Cómo guardar notas con JSON.stringify y setItem?
Valida que el parámetro no sea undefined o null.
Serializa con JSON.stringify antes de guardar.
Usa localStorage.setItem con la clave global.
/**
* Guarda las notas en local storage.
* @param{Array}notes - array de notas a guardar.
*/functionsaveToStorage(notes){if(notes ===undefined|| notes ===null){console.error('No se pueden guardar notas, datos inválidos');return;// Evita continuar con el guardado.}const notesJSON =JSON.stringify(notes);localStorage.setItem(storageKey, notesJSON);}
Conceptos aplicados: validación de datos, serialización JSON, uso de console.error, control de flujo con return y setItem en localStorage.
¿Cómo cargar notas con getItem y JSON.parse?
Lee el valor con localStorage.getItem.
Si no hay datos, retorna un array vacío.
Parse a objeto iterable con JSON.parse.
Verifica el tipo con Array.isArray antes de asignar.
/**
* Carga las notas desde el local storage.
* @returns{Array} array de notas o array vacío si no hay datos.
*/functionloadFromStorage(){const notesJSON =localStorage.getItem(storageKey);if(notesJSON ===null|| notesJSON ===undefined){return[];}let notes =[];const parsedNotes =JSON.parse(notesJSON);if(Array.isArray(parsedNotes)){ notes = parsedNotes;}return notes;}
Conceptos aplicados: lectura desde almacenamiento, parseo JSON, verificación de tipo con Array.isArray, retorno seguro con array vacío.
¿Por qué documentar funciones con yesdoc?
La documentación breve y clara facilita el mantenimiento y el uso de las funciones. Con formato yesdoc, se deja explícito qué hace cada función, qué parámetros recibe y qué devuelve.
Descripción directa: qué hace la función en una línea.
@param: tipo y significado del argumento, por ejemplo, array de notas a guardar.
@returns: forma del retorno, por ejemplo, array de notas o array vacío.
Beneficio clave: legibilidad y estandarización en todo el código.
¿Cómo mejora Prettier el flujo de trabajo?
Integrar Prettier al editor permite formatear el código al guardar. Así se aseguran puntos y comas, indentación correcta y una estructura consistente. Como “la cereza del pastel”, automatiza el estilo para que el foco sea la lógica.
Formatea al guardar cambios.
Organiza el código y agrega puntos y comas.
Corrige indentación y espaciados.
Produce una sintaxis amigable y lista para leer.
¿Te gustaría compartir cómo estructuraste tus funciones o qué validaciones agregaste? Deja tus dudas o comentarios para seguir mejorando juntos.
Mis notas sobre lo que se hizo en el código explicado:
Se crea en la parte superior la lógica de persistencia al declarar STORAGE_KEY.
Como dato importante, está en MAYÚSCULAS para avisar que esa variable es una constante "pura": un valor que no debe cambiar en toda la ejecución, como una llave de configuración o un identificador fijo.Es como poner una señal de "no tocar" en el código.
Se continúa con funciones de guardado de storage, enfatizando en la importancia de documentar lo que hace cada función, lo que retorna y sus parámetros.
Primero se crea saveToStorage(), recibe notas. Se valida con un if si esas notas son undefined o null, de ser así se regresa un error y se detiene el código con un return para evitar que siga guardando.
Continuando con el else, se crea la constante notesJSON, que convierte al objeto recibido como parámetro (notas) a texto, implementando: JSON.stringify(notes)
Se guardan esas notas en el storage con localStorage.setItem(STORAGE_KEY,notesJSON);
Nota: localStorage solo entiende cadenas de texto, por eso es necesario usar stringify
setItem es un método que recibe dos argumentos obligatorios: el identificador (la llave) y el valor (el dato). STORAGE_KEY es el nombre único que elegimos para encontrar ese dato después. notesJSON es el valor, que ya transformamos a texto para que el navegador pueda guardarlo.
Después se crea la función que carga las notas (loadFromStorage()). En ella se declara la constante notesJSON, que obtiene el contenido del storage usando localStorage.getItem(STORAGE_KEY);
Se valida si notesJSON es nulo o indefinido, de ser así, se retorna un array vacío.
Si notesJSON tienen un valor, se declara un array vacío llamado notes que se usará más adelante.
Se vuelven a transformar las notas obtenidas - de string a un objeto iterable usando parse: JSON.parse(notesJSON) y se le asignan a la variable parsedNotes
se comprueba que estas notas son array usando if(Array.isArray(parsedNotes);
Se le asigna el valor de parsedNotes al array vacío creado anteriormente (notes).