DEV Community

Maximiliano Burgos
Maximiliano Burgos

Posted on • Edited on

Persistencia de Datos en Javascript (LocalStorage)

Hay un momento en nuestro aprendizaje en el sendero de Javascript, donde nos paramos a pensar: Todos estos datos se borran cuando refresco la página, me gustaría empezar a guardarlos / persistirlos.

Entonces, escuchamos sobre bases de datos y pensamos que debemos implementar un engine como MySQL, MongoDB. Es difícil porque nos tenemos que involucrar con tecnologías de servidor como NodeJS, y si bien es un gran avance, nos desvía del foco inicial porque tenemos que invertir muchas horas en aprender conceptos nuevos para aplicar un propósito tan simple como la persistencia de ese objeto persona que va a morir en el siguiente F5.

Pero podemos manejarlo!

No vamos a engañar a nadie, usar bases de datos es la mejor forma y más segura de persistir información. Pero tenemos una alternativa mas sencilla y rápida llamada LocalStorage.

La implementación es muy sencilla, y vamos a ir desde lo mas simple como una variable hasta lo mas complejo como un JSON Object.

Guardar un String

Supongamos que queremos guardar una entidad persona. Nos centramos en su nombre, el cual metemos en una variable:

var name = "Maxi";
Enter fullscreen mode Exit fullscreen mode

Luego debemos elegir un valor clave, por ejemplo “person” y guardar dicho string en nuestro LocalStorage. Lo hacemos de la siguiente manera:

localStorage.setItem("person", name);
Enter fullscreen mode Exit fullscreen mode

Si nosotros ejecutamos nuestro script y abrimos la consola de Chrome (Control + Shift + I), y luego nos vamos a la pestaña Application > Storage > LocalStorage, nos vamos a encontrar con lo siguiente:

Consola Chrome LocalStorage

Con esto confirmamos que el valor fue guardado, y aunque eliminemos las lineas de código del localStorage, el valor va a continuar ahi hasta que limpiemos cache del navegador. Pero como lo obtenemos para utilizarlo en otro lado, como por ejemplo mostrarlo en consola? Muy simple:

var name = localStorage.getItem("person");
Enter fullscreen mode Exit fullscreen mode

Si nunca guardamos “person” en LocalStorage, entonces getItem() nos devolverá undefined, por lo cual podríamos condicionarlo:

var name;

if(localStorage.getItem("person")){
    name = localStorage.getItem("person");
} else {
    name = "No soy una persona";
}
Enter fullscreen mode Exit fullscreen mode

Luego para mostrar el valor almacenado, es tan simple como usar un console log:

console.log(name);
Enter fullscreen mode Exit fullscreen mode

Guardar un Array

Si consideramos que estamos guardando un nombre de persona, quizá tengamos que guardar una lista de nombres. Para ello utilizaremos un array de la siguiente manera:

var names = ["Maxi", "Tomas", "Val"];
localStorage.setItem("persons", names);
Enter fullscreen mode Exit fullscreen mode

Luego para poder obtenerlo, lo iteramos:

var names = localStorage.getItem("persons");

for(var i = 0; i < names.length; i++){
    console.log(names[i]);
}
Enter fullscreen mode Exit fullscreen mode

Guardar un Objeto

En realidad si guardamos personas, no nos sirve solo almacenar el nombre. Necesitamos mas datos como su número de documento, apellido, dirección, email. Entonces necesitamos un objeto como este:

var person = {
    "firstName": "Maxi",
    "lastName": "Tompson",
    "document": 32432423
}
Enter fullscreen mode Exit fullscreen mode

La lógica dice que deberíamos poder guardarlo en localStorage de la siguiente manera:

localStorage.setItem("person", person);
Enter fullscreen mode Exit fullscreen mode

Ahora armamos la obtención del dato:

var personFromLS = localStorage.getItem("person");
console.log("Persona " + personFromLS.firstName);
Enter fullscreen mode Exit fullscreen mode

Esto nos debería mostrar el string “Persona Maxi”, pero nos devuelve:

Persona undefined
Enter fullscreen mode Exit fullscreen mode

Pero como puede ser? Esto es porque localstorage no almacena objetos. Pero a fin de cuentas necesitamos que lo haga, entonces que podemos hacer?

Guardar un JSON Object

JSON es técnicamente un string, por lo que nuestro localstorage va a permitir que se guarde. Entonces vamos a convertir nuestro objeto en un json string y guardarlo:

var person = {
    "firstName": "Maxi",
    "lastName": "Tompson",
    "document": 32432423
}
var jsonPerson = JSON.stringify(person);
localStorage.setItem("person", jsonPerson);
Enter fullscreen mode Exit fullscreen mode

Y de esta manera, cuando queramos obtener ese json del localstorage, lo convertiremos a un objeto javascript nuevamente:

var personJSONFromLS = localStorage.getItem("person");
var personFromLS = JSON.parse(personJSONFromLS);
console.log("Persona " + personFromLS.firstName);
Enter fullscreen mode Exit fullscreen mode

Entonces podemos concluir en lo siguiente:

  • JSON.stringify(): Convierte JS Object a JSON Object.
  • JSON.parse(): Convierte JSON Object a JS Object.

De esta manera podemos almacenar objetos en LocalStorage, primero almacenandolos como json string y luego parseandolos para manejarlos en javascript.

Top comments (0)