Almacenamiento local en Javascript
Javascript nos proporciona los objetos localStorage y sessionStorage para poder leer y escribir datos
en el navegador
Javascript nos proporciona dos objetos con los mismos metodos para poder leer y escribir datos del
usuario en el navegador para su uso posterior.
Los datos que almacenemos mediante el objeto localStorage permanecerán
indefinidamente en el navegador, sin importar si se cambia de página, o si el usuario
abandona el sitio ya sea yendo a otro sitio web o directamente cerrando el navegador.
Por otro lado los datos que almacenemos mediante el objeto sessionStorage solo
permanecerán en el navegador mientras se mantenga abierta la ventana/pestaña donde se
crearon.
Los datos a guardar en el almacenamiento local deben estar en formato de cadena de texto y deben ir
en pares, un nombre para el dato y su contenido.
| Método/Propiedad | Descripción | |
|---|---|---|
| localStorage.setItem(nombre, contenino) | Añade un elemento al almacenamiento local | |
| localStorage.getItem(nombre) | Recupera un elemento del alamcenamiento local | |
| localStorage.removeItem(nombre) | Elimina un elemento del almacenamiento local | |
| localStorage.clear() | Elimina todos los elementos en el almacenamiento local | |
| localStorage.key(n) | Permite recuperar el nombre de un elemento en el almacenamiento local al proporcionarle un indice numérico |
|
| localStorage.length | Propiedad para consultar el número de elementos almacenados en el objeto | |
Ejemplo practico del almacenamiento local
Uno uso común que se le puede dar a esta característica de JS es el de almacenar la configuración que
el usuario haya hecho en la interfaz de nuestra aplicación, para así evitar que el usuario tenga que
volver a configurar todo de nuevo con cada visita.
A continuación te mostrare un código de ejemplo donde se guarda la configuración de los menús
abiertos o cerrados por el usuario.
Mantener menús abiertos o cerrados por el usuario
En el siguiente ejemplo tenemos un ménu dentro de un contenedor con Id ‘#contenedor_1’ con un
funcionamiento muy simple.
Al pulsar un botón añadiremos o quitaremos la clase abierto al contenedor del menu.
Al añadir la clase aplicaremos la propiedad CSS display: none; y al eliminar la clase restauraremos
los estilos por defecto.
- Elemento 1
- Elemento 2
- Elemento 3
Estructura HTML del menu y su contenedor
<button type="button" id="toogle_contenedor_1">Cambiar estado del menú</button>
<div id="contenedor_1">
<ul>
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
</ul>
</div>
Estilos CSS para abrir/cerrar menú
#contenedor_1.cerrado{
display: none;
}
Código JavaScript del ejemplo
document.addEventListener('DOMContentLoaded', ()=>{
//Apuntamos al contenedor que deseamos abrir/cerrar
let contenedor_1 = document.querySelector('#contenedor_1');
//Consultamos el estado del elemento almacenado y lo representamos visualmente
if( localStorage.getItem('contenedor_1_status') == 'cerrado' ){
contenedor_1.classList.add('cerrado');
}
//Apuntamos al botón que permitirá cambiar el estado del contenedor al hacer click
let toogle_contenedor_1 = document.querySelector('#toogle_contenedor_1');
toogle_contenedor_1.addEventListener('click', function(){
let oldStatus, newStatus;
//Determinamos el estado actual y el antiguo consultando directamente en el elemento
if( contenedor_1.classList.contains('cerrado') ){
oldStatus = 'cerrado';
newStatus = 'abierto';
}else{
oldStatus = 'abierto';
newStatus = 'cerrado';
}
//1) Removemos estilos del estado anterior
contenedor_1.classList.remove(oldStatus);
//2) Añadimos estilos con el nuevo estado
contenedor_1.classList.add(newStatus);
//3) Guardamos el nuevo estado en el almacenamiento local
localStorage.setItem('contenedor_1_status', newStatus);
});
});