Estoy tratando de crear un sitio web Svelte que almacene la información del usuario al recargar. Recibo el siguiente error:
Error when evaluating SSR module /src/stores.js: ReferenceError: localStorage is not defined
La página se carga correctamente (incluidos localStorage.user y localStorage.isLoggedIn) después de volver a cargar y este error solo aparece al principio.
Aquí está mi archivo stores.js :
import { writable } from "svelte/store"; const storedUser = JSON.parse(localStorage.user); export const user = writable(storedUser); user.subscribe((value) => localStorage.user = JSON.stringify(value)); export const isLoggedIn = writable(localStorage.isLoggedIn === "true"); isLoggedIn.subscribe((value) => localStorage.isLoggedIn = String(value));¿Cómo soluciono este error (y por qué no aparece después de recargar?)
Me di cuenta de que tenía que verificar si había un entorno de navegador antes de acceder a localStorage (pensé que publicaría la respuesta aquí).
Solo import { browser } from '$app/env'; , y puede usar if (browser) .
Aquí está mi nuevo archivo stores.js que al menos debería resolver el error:
import { writable } from "svelte/store"; import { browser } from '$app/env'; var storedUser = {}; if (browser) { storedUser = JSON.parse(localStorage.user); } export const user = writable(storedUser); user.subscribe((value) => { if (browser) { localStorage.user = JSON.stringify(value); } }); var storedLogin = false; if (browser) { storedLogin = (localStorage.isLoggedIn === "true"); } export const isLoggedIn = writable(storedLogin); isLoggedIn.subscribe((value) => { if (browser) { localStorage.isLoggedIn = String(value); } });