¿Cómo se utiliza el Local Storage para la persistencia de datos?
Local Storage es una API del navegador que permite almacenar datos de manera persistente. Esto significa que la información guardada no se pierde incluso si se cierra la pestaña, el navegador o el computador. Cuando volvamos a abrir la aplicación, los datos estarán allí. En este contexto, el uso de Local Storage es fundamental para mantener la información de nuestra aplicación, como los "To-Dos", asegurando que los cambios realizados por el usuario permanezcan disponibles en sesiones futuras.
¿Qué métodos son fundamentales en el Local Storage?
Local Storage proporciona varios métodos clave:
getItem: Permite leer los datos almacenados utilizando el nombre del item.
setItem: Guarda o actualiza un item en Local Storage.
removeItem: Borra un item específico del almacenamiento.
Estos métodos permiten que nuestra aplicación interactúe eficazmente con el almacenamiento local, posibilitando la persistencia de datos.
¿Cómo integramos Local Storage en una aplicación?
Para integrar Local Storage en nuestra aplicación y asegurar la persistencia de los "To-Dos", seguimos estos pasos:
Comenzamos por comentar los datos por defecto en nuestro código, lo que permitirá inicializar nuestra lista desde Local Storage.
Visualizamos y manejamos los datos en la consola. Utilizamos Local Storage para ver, agregar y eliminar información.
Convertimos estructuras complejas a string con JSON.stringify. Local Storage solo almacena cadenas de texto. Necesitamos convertir objetos y arrays a strings antes de almacenarlos.
Para recuperar los datos al tipo original, usamos JSON.parse. Esto transforma el string de vuelta a su estructura JavaScript original.
A continuación, te mostramos un ejemplo de cómo se ve la implementación básica de almacenar y recuperar datos usando Local Storage en el navegador:
// Guardar datos en Local Storageconst todos =[{task:'Cortar cebolla'},{task:'Cortar tomate'}];localStorage.setItem('todos-version1',JSON.stringify(todos));// Recuperar datos de Local Storageconst storedTodos =JSON.parse(localStorage.getItem('todos-version1'));console.log(storedTodos);
¿Cómo manejamos errores y casos iniciales?
Al implementar Local Storage, es crucial prever escenarios donde el item a obtener no exista, para evitar errores que rompan la aplicación:
Inicialización VACÍA: Si el item no existe, por defecto asignamos un array vacío para que la aplicación se mantenga funcional.
Errores comunes: Si se rompe algo, podemos eliminar el item del almacenamiento y reiniciarlo para evitar conflictos.
// Inicializamos los datos al cargar la aplicaciónfunctionloadInitialData(){let parsedTodos;const localStorageTodos =localStorage.getItem('todos-version1');if(!localStorageTodos){ parsedTodos =[];// Array vacío como estado iniciallocalStorage.setItem('todos-version1',JSON.stringify(parsedTodos));}else{ parsedTodos =JSON.parse(localStorageTodos);}return parsedTodos;}
¿Cómo asegurar que Local Storage y el estado de la aplicación estén sincronizados?
Para mantener sincronizados el estado de la aplicación y el almacenamiento local, implementamos una función que maneje ambos simultáneamente:
functionsaveTodos(newTodos){// Actualizar el estadosetTodos(newTodos);// Persistir en local storagelocalStorage.setItem('todos-version1',JSON.stringify(newTodos));}
Al usar saveTodos para cambiar el estado de la aplicación, cualquier interacción que modifique la lista de "To-Dos" actualizará tanto el estado local como el almacenamiento, asegurando que se mantengan en sincronía.
¡Ahora tienes las herramientas para implementar Local Storage e incrementar la persistencia de datos en tus aplicaciones web! Sigue explorando y aplicando estas técnicas para mejorar la experiencia del usuario y el funcionamiento de tus apps.
🔵Evita acceder al localStorage dentro del componente
Acceder a los valores del localStorage dentro del componente es muy pesado en cuanto al rendimiento, ya que se ejecuta sincrónicamente en cada re-renderizado del componente. En su lugar, puedes leerlo utilizando un callback que retorne el valor inicial del useState, esto permitirá acceder a la información una sola vez al momento que se crea el componente, esto por la definición de useState.
.
Esa porcion de codigo que posteaste a que porción reemplazaria del codigo que manejamos en el curso?
LocalStorage es una forma de almacenar datos en el navegador web, que persisten aún después de que el usuario haya cerrado la ventana o salido del sitio web. Es útil para guardar información del usuario, como preferencias, configuraciones, entre otros.
.
Los métodos más comunes de LocalStorage son:
.
localStorage.setItem(key, value): Agrega un elemento con una clave y un valor al almacenamiento local.
localStorage.getItem(key): Recupera el valor de la clave especificada en el almacenamiento local.
localStorage.removeItem(key): Remueve un elemento del almacenamiento local según su clave.
localStorage.clear(): Borra todos los elementos del almacenamiento local.
Gracias por los resumenes bro
Chicos para comentar las lineas de codigos recuerden que el atajo es control + k + c, para descomentar es control + k + u
Excelente aporte, gracias.
Otro tip: puedes mover lineas del codigo hacia arriba o abajo utilizando alt + la tecla de abajo/arriba
y como otro dato extra se puede "clonar" una linea o conjunto de lineas si nos ponemos en la linea o seleccionamos un conjunto de lineas y luego apretamos alt + shift y flecha hacia arriba o hacia abajo dependiendo donde queremos que se clonen las lineas, esto en VS code
Renderizado inicial desde Local Storage (version abreviada):
Yo use useEffect() para manejar el localStorage.
El primer useEffect() trae los datos de localStorage a nuestra app, y el segundo actualiza el LocaStorage cada vez que cambia el estado de tasks.
💡 Local Storage es un metodo para tener datos persistentes del lado del navegador. Se pueden almacenar inicios de sesion y/o estados y aunque se recarge, cierre o reinicie permaneceran disponibles para su uso.
.
Local Storage solo puede guardan datos en formato string. Se guardan en formato de Clave : Valor.
.
Como guardar y acceder a datos en Local Storage
Todo dato a guardar en Local Storage debe ser convertido a string, se puede hacer con la funcion JSON.stringyfi( datos ).
//* transformar datos a stringlet stringifiedTodos =JSON.stringify(localStorageTodos)
Guardar datos en Local Storage mediante la funcion localStorage.setItem( ).
Esta funcion recibe dos parametros: 1. El nombre identificador de los datos y 2. los datos como string.
Si la clave ya existe se reemplazara su valor.
//* Guardar datos en Local Storage con setItem()localStorage.setItem('TODOS_V1', stringifiedTodos)
Acceder a datos guardados en Local Storage con el metodo getItem()
getItem recibe un parametro que es el nombre identificador de los datos que se requieren.
//* Obteniendo datos de Local Storage con getItem()const localStorageTodos =localStorage.getItem('TODOS_V1')
Convertir datos de Local Storage a datos de JavaScript: Los datos vienen en formato string y se pueden transformar para ser manipulados en JavaScript mediante la funcion JSON.parse()
let parsedTodos =JSON.parse(localStorageTodos);
Remover datos de Local Storage: con el metodo localStorage.removeItem( nombreItem ) se puede eliminar un valor guardado.
localStorage.removeItem( 'nombreItem' )
Limpiar Local Storage: se pueden eliminar todos los datos guardados con el metodo localStorage.clear();
muy buenos apuntes!
cuando el profesor iba a ver si el condicional funcionó en el minuto 19:56 a mi me aparecía enste nuevo error: VM659:1 Uncaught SyntaxError: Unexpected token 'o', "[object Obj"... is not valid JSON at JSON.parse (<anonymous>) que significaba que cuando quería parsear el localStorageTodos en caso de que hubiera infomación, no era válido, y yo no entendía qué estaba sucediendo si había escrito todo bien. estuve unos buenos minutos tan frustrada que lloré (tengo mucho estrés acumulado) y al final me tocó acudir con mi hermano mayor.
todo el problema era que tenía información guardada en el localStorage y eso obstruía todo el flujo de código nuevo que había escrito, justo como el profesor había advertido. había olvidado que no borré la información que había guardado de las pruebas.
les recomiendo mucho que, en caso de que se sientan muy estresados con un error, se levanten de la silla y se despejen un rato. a mí la frustración me cegó de tal forma que no pude recapitular todo lo que había hecho y encontrar el error a base de ello. espero que mi experiencia le sea de ayuda a alguna persona que tal vez esté pasando por lo mismo o algo parecido.
Me acabas de ahorrar una infinidad de tiempo, apenas llevaba 5 min buscando mi error, creí que sería algo de sintaxis jajajajaja, muchas gracias :)
Local Storage herramienta que nos ayuda hacer persistencia de datos en el navegador.
LocalStorage en React:
LocalStorage es una característica del navegador que permite a las aplicaciones web almacenar datos de forma persistente en el navegador. Estos datos se conservan incluso cuando se cierra la pestaña del navegador o se reinicia la computadora. En React, LocalStorage se utiliza comúnmente para almacenar y recuperar información importante del usuario, como configuraciones, preferencias o datos temporales.
Principales Conceptos:
Almacenamiento de Datos:
LocalStorage permite almacenar pares clave-valor en el navegador. Los datos se almacenan como cadenas de texto.
Persistencia de Datos:
Los datos almacenados en LocalStorage persisten a través de las recargas de página y las sesiones del navegador. Esto significa que los datos estarán disponibles incluso después de cerrar y volver a abrir la aplicación.
Capacidad de Almacenamiento:
La capacidad de almacenamiento de LocalStorage es generalmente mayor que la de las cookies, pero aún así tiene límites. Se puede almacenar alrededor de 5 MB de datos por dominio.
Uso de LocalStorage en React:
En React, puedes interactuar con LocalStorage para almacenar y recuperar datos utilizando las siguientes funciones principales:
localStorage.setItem(key, value)
Esta función se utiliza para almacenar un par clave-valor en LocalStorage. key es la clave con la que se identificará el valor y value es el dato que se almacenará.
localStorage.setItem('username','john_doe');
localStorage.getItem(key)
Esta función se utiliza para recuperar el valor asociado con una clave específica desde LocalStorage.
const username =localStorage.getItem('username');
localStorage.removeItem(key)
Esta función elimina el par clave-valor asociado con la clave especificada de LocalStorage.
localStorage.removeItem('username');
Uso Común en React:
En una aplicación React, LocalStorage se utiliza comúnmente para:
Guardar Preferencias del Usuario:
Guardar configuraciones personalizadas, temas o preferencias del usuario para que se mantengan entre sesiones.
Persistir Datos Temporales:
Mantener datos temporales, como formularios no completados, incluso si la página se recarga.
Manejar Sesiones de Usuario:
Almacenar información sobre la sesión del usuario para mantenerlo autenticado incluso después de cerrar y volver a abrir la aplicación.
Ejemplo en React:
// Almacenar en LocalStoragelocalStorage.setItem('theme','dark');// Recuperar de LocalStorageconst theme =localStorage.getItem('theme');// Eliminar de LocalStoragelocalStorage.removeItem('theme');
Recuerda que los datos almacenados en LocalStorage son accesibles a través de JavaScript en el navegador, por lo que no se deben almacenar datos sensibles o críticos de seguridad en LocalStorage.
Si el elemento de localStorage se encuentra en el estado inicial, o si está vacío, recomiendo:
Leí en un comentario que no se debe trabajar tanto con el storage dentro del componente por tema de optimización, así que lo hice un poquito diferente para evitar los condicionales en medio del componente y acceder al localStorage ahí.
¿Alguien sabe si es correcto y óptimo hacerlo así?
Si quieren saber los atajos de VSC y quieren elegir los más útiles, pueden leer estos ✨ apuntes sobre atajos de VSC. La verdad es que sirven mucho.
Alguien me puede enseñar como el profe Juan borra palabras tan rapido? jaja estoy en Mac
command o option + delete
Gracias profe
Mi nuevo verbo aprendido: "estringuifiar".
Tú estringuifeas, yo estringuifeo.
... jejeje
A ver qué tal me sale el trabalenguas: "un estringuifiador no pudo estringuifiar. Cualquiera que sí lo pueda estringuifiar, buen estringuifiador será"
Un abrazo Juan...
Para el manejo del error de que no exista data inicial, acorté un poco el código:
let parsedTodos =JSON.parse(localStorage.getItem('TODOS_V1'));if(!parsedTodos){localStorage.setItem('TODOS_V1',JSON.stringify([])) parsedTodos =[]}
otra clase muy satisfactoria... :)
A mi me funciona si el operador ternario lo colocamos directo en el estado inicial de todos quedano de la asiguiente forma:
Para hacer el paso de manejo de localStorage no es 100% necesario usar el condicional if, si quieren usar un codigo mas corto simplemente pueden apoyarse en los valores por defecto o default values