Ambas herramientas permiten guardar información en el navegador.
Antes de tocar una sola línea de código debemos recordar que tanto
LocalStorage como
SessionStorage SOLO pueden almacenar texto plano
(strings) usando pares de clave: valor. No
entienden de objetos, ni de arrays, ni de números; para ellas, todo en
la vida es un texto. ## Los 5 Métodos de Local Storage y Session
Storage
Tanto localStorage como sessionStorage
(reunidas bajo el nombre de Web Storage API) comparten
exactamente los mismos métodos. Con lo cual, si se aprende a
usar una, automáticamente se sabes usar la otra. Lo único que cambia es
el nombre del objeto global (localStorage o
sessionStorage). Los 5 métodos son:
.setItem(clave, valor)Sirve para meter un dato en el localStorage o
sessionStorage. Si la “clave” ya existe, se
sobrescribe el valor anterior.
.getItem(clave)Pasamos el nombre de la clave que se busca y devuelve su valor en
texto. Si no se encuentra la clave, devuelve null.
.removeItem(clave)Si ya no se necesita un dato en concreto, se destruye pasándole su clave.
.clear()El método .clear() elimina absolutamente
todo lo que el navegador haya guardado desde un dominio en ese
almacenamiento.
.lengthEn realidad es una propiedad, no un método (no lleva
paréntesis). Informa cuántas claves se tienen guardadas en un momento
dado.
Hay un detalle técnico de SessionStorage que hay que tomar en cuenta: si el usuario refresca la página (F5), los datos NO se borran.
Si se intenta guardar una variable compuesta (array u objeto)
directamente a SessionStorage o LocalStorage,
pasará esto:
Se utilizan dos métodos JSON nativos de JavaScript: JSON.stringify() y JSON.parse().
JSON.stringify(array u objeto). Este método transforma
mágicamente un objeto o array en una cadena de texto plana.
JSON.parse(texto). Esto toma el texto plano y lo transforma
de vuelta en un array u objeto literal de JavaScript.
Tenemos un array de canciones favoritas:
¿Cómo escribiríamos el código para guardar ese array
en el sessionStorage bajo la clave
"lista_reproduccion", y luego cómo lo
leeríamos de vuelta en una nueva variable para hacerle
un console.log() al segundo elemento del array
("Billie Jean")?
LocalStorageSi un usuario entra a tu web y prefiere leerla con el fondo oscuro, esa es una preferencia personal a largo plazo. Sería extremadamente molesto para el usuario que, cada vez que cierra la pestaña y vuelve a entrar al día siguiente, la web aparezca en blanco brillante y tenga que volver a pulsar el botón de “Modo Oscuro”.
Al usar LocalStorage, el navegador recuerda esa decisión
para siempre (o hasta que el usuario decida cambiarla de nuevo), sin
importar si apaga el ordenador o cierra el navegador.
Con Tailwind CSS, lo que se hace es añadir o
quitar una palabra (una clase llamada dark) en la etiqueta
principal <html> de tu página.
Tailwind está diseñado para que, si el elemento
<html> tiene la clase dark,
automáticamente se activen todos los estilos oscuros que hayas
programado (los que empiezan por dark:).
Este pequeño script se coloca normalmente en el
<head> del HTML. Su trabajo es “mirar” el
LocalStorage antes de que la página se pinte, para evitar el destello blanco que ocurre si el modo oscuro se activa tarde.
Cuando el usuario hace clic en el botón Cambiar Tema para cambiar
el tema, tu código de JavaScript tiene que hacer dos cosas a la vez:
cambiar la interfaz y guardar la decisión en el
LocalStorage.
En las etiquetas de Tailwind se escriben ambos tipos de
comportamientos o clases de la siguiente manera:
class="bg-white text-black dark:bg-slate-900 dark:text-white".
La función cambiarTema se encarga de aplicar los estilos
dark en cuanto se hace clic en el botón
botonTema agregando/quitando la clase dark del
elemento HTML y guardando el nuevo tema en el
LocalStorage.
El “secreto” de Tailwind está en cómo funciona el CSS por dentro y una cosa llamada selectores descendientes.
Cuando se agregan las siguientes dos clases a un párrafo
class="text-blue-800 dark:text-yellow-400", se están dando
dos instrucciones visuales distintas a ese mismo párrafo. Tailwind
traduce eso a código CSS real que el navegador entiende así:
Estudiemos esta segunda regla de CSS:
.dark .dark\:text-yellow-400.
La segunda de las dos clases separadas por un espacio, le dicen al
navegador: “Aplica este color amarillo SÓLO si este elemento
está dentro de otro elemento que tenga la clase
.dark”.
Si el árbol de HTML es este:
¿Qué hace el navegador cuando va a pintar ese párrafo? Hace un escaneo rápido hacia arriba:
dark:text-yellow-400..dark”.<body>,
<html>) y entonces… encuentra que la etiqueta
<html> tiene la clase dark.Al eliminar la clase dark del <html>,
el navegador volverá a escanear, verá que ya no está dentro de un padre
.dark, ignorará la regla del amarillo y el párrafo volverá
a verse azul instantáneamente.
Con Tailwind, solo se escriben, en los elementos HTML, las dos variantes usando el prefijo dark: (por ejemplo: bg-white dark:bg-black).
JavaScript solo se encarga de encender o apagar el interruptor
general (<html class="dark">) basándose en lo que
haya leído en el LocalStorage. Tailwind y el navegador
hacen todo el resto del trabajo en equipo.