Sincronización del estado con localStorage
Cree un hook personalizado useLocalStorage que mantenga sincronizados bidireccionalmente el estado de React y localStorage.
Sincronización del estado con localStorage es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.
El enfoque ingenuo se desincroniza
Una primera reacción es leer localStorage en un lugar y escribir en otro, pero ambos pueden desincronizarse. Las actualizaciones de estado que olvidan persistir los datos, o los valores persistidos que no se reflejan en el estado, provocan errores.
Necesita una única fuente de verdad que mantenga el estado de React y el almacenamiento perfectamente sincronizados.
El hook personalizado useLocalStorage
La solución más clara es un hook useLocalStorage que envuelve useState y persiste los cambios automáticamente. Devuelve un valor y un setter, igual que useState.
Los componentes consumidores lo utilizan exactamente igual que el estado normal, pero obtienen persistencia automáticamente.
Función de inicialización diferida
Leer localStorage es una operación síncrona, por lo que no debe hacerlo en cada renderizado. Pase una función a useState, el inicializador diferido, para que la lectura solo se realice una vez al montarse.
Dentro de esa función, analice el valor almacenado o devuelva el valor predeterminado proporcionado.
Por qué es importante la inicialización diferida
Si calcula el estado inicial directamente como argumento, esa expresión se ejecuta en cada renderizado, aunque se ignore después del primero. Con una función, React la llama una sola vez.
En las lecturas de localStorage, esto evita trabajo síncrono repetido en el hilo principal durante cada renderizado.
Sincronización mediante useEffect
Para persistir las actualizaciones, añada un useEffect que se ejecute cada vez que cambie el valor y llame a localStorage.setItem(key, JSON.stringify(value)).
Incluir el valor en el array de dependencias hace que cada cambio de estado se escriba automáticamente en el almacenamiento.
Las actualizaciones funcionales evitan los cierres obsoletos
Al establecer un valor basándose en el anterior, use la forma funcional setValue(prev => prev + 1). Esto evita los cierres obsoletos, en los que se escribiría un valor antiguo capturado.
Es especialmente importante dentro de controladores de eventos y efectos que puedan capturar una instantánea desactualizada.
Tratamiento de un valor almacenado nulo
getItem devuelve null cuando no existe la clave. El inicializador debe detectarlo y recurrir al valor predeterminado, en lugar de intentar analizar null.
Una comprobación como stored != null ? JSON.parse(stored) : defaultValue gestiona correctamente la primera visita.
Genéricos de TypeScript
En TypeScript, convierta el hook en genérico: function useLocalStorage<T>(key: string, initial: T). Esto conserva el tipo del valor para que los consumidores obtengan toda la seguridad de tipos.
La tupla devuelta tiene el tipo [T, Dispatch<SetStateAction<T>>], igual que useState.
Versionado de datos almacenados
Con el tiempo, la forma de los datos cambia y los valores almacenados antiguos pueden romper el código nuevo. Guarde una clave de versión junto con los datos para detectar formatos obsoletos.
Por ejemplo, guarde { version: 2, data } y compare la versión al leer.
Eliminación tras una discrepancia de versión
Cuando la versión almacenada no coincide con la actual, descarte o migre el valor antiguo en lugar de confiar en él. La estrategia más sencilla consiste en eliminar la entrada obsoleta y recurrir a los valores predeterminados.
Esto evita errores causados por datos escritos por una versión anterior de su aplicación.
Cómo ensamblar el hook
Un useLocalStorage completo combina un inicializador diferido que lee y analiza los datos de forma segura, un setter que admite actualizaciones funcionales y un useEffect que escribe los cambios con control de versiones.
El resultado es un reemplazo directo de useState que sobrevive a las recargas.
Comprobación rápida
Compruebe su comprensión de la inicialización del estado.
Resumen
Ha aprendido a crear un hook useLocalStorage con un inicializador diferido, persistir los cambios mediante useEffect, usar actualizaciones funcionales para evitar cierres obsoletos y gestionar valores nulos.
También ha visto los genéricos de TypeScript y el versionado para eliminar datos obsoletos de forma segura.
Preguntas frecuentes
¿La lección «Sincronización del estado con localStorage» es gratis?
Sí — el texto completo de «Sincronización del estado con localStorage» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Sincronización del estado con localStorage»?
Cree un hook personalizado useLocalStorage que mantenga sincronizados bidireccionalmente el estado de React y localStorage. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar React Academy?
No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Sincronización del estado con localStorage»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de React Academy?
Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Lectura y escritura de localStorage en React
- Sincronización del estado con localStorage
- Gestión de eventos de almacenamiento entre pestañas
- sessionStorage, IndexedDB y elección de la API adecuada