Código fuente que permita garantizar que la selecc...
Creado el: 15 de marzo de 2025
Creado el: 15 de marzo de 2025
Código fuente que permita garantizar que la selección del tema persista en localStorage y crear un componente práctico como un botón para cambiar el tema. Debe tener como características que modifique el store de Zustand para guardar y recuperar el tema del localStorage.
Crea un componente reutilizable (ejemplo botón/interruptor) para cambiar el tema. Asegura que el tema persista tras recargar la página.
Entregable:
Código de persistencia en localStorage.
Componente práctico funcional y bien documentado.
Pruebas finales de persistencia y usabilidad.
A continuación se muestra un ejemplo práctico de cómo implementar la persistencia de un tema (ej. claro u oscuro) en localStorage utilizando Zustand para el manejo de estado global, junto con un componente reutilizable (un botón) para cambiar dicho tema. Este código está escrito en React (usando Hooks) y asume que se está trabajando con un proyecto creado con Create React App o similar.
Asegúrate de tener instalado Zustand:
bashnpm install zustand
O con Yarn:
bashyarn add zustand
Vamos a crear un store que maneje el estado de nuestro tema. Para simplificar, usaremos el middleware persist que ya trae Zustand para almacenar automáticamente en localStorage. En tu carpeta de stores (por ejemplo, src/stores/useThemeStore.js) coloca el siguiente código:
javascript// src/stores/useThemeStore.js import create from 'zustand'; import { persist } from 'zustand/middleware'; const useThemeStore = create( persist( (set) => ({ // Valor inicial del tema theme: 'light', // Acción para alternar el tema toggleTheme: () => set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })), }), { name: 'theme', // Clave con la que se guardará en localStorage getStorage: () => localStorage, // API de almacenamiento (puede ser sessionStorage) } ) ); export default useThemeStore;
localStorage y recuperarlo en recargas.light (claro) u dark (oscuro).localStorage ("theme").localStorage.Ahora crearemos un componente (por ejemplo, ThemeToggleButton.js) que muestre un botón para alternar entre los dos temas. Este componente será totalmente reutilizable en tu aplicación.
jsx// src/components/ThemeToggleButton.js import React from 'react'; import useThemeStore from '../stores/useThemeStore'; const ThemeToggleButton = () => { const { theme, toggleTheme } = useThemeStore(); return ( <button onClick={toggleTheme}> Cambiar a {theme === 'light' ? 'dark' : 'light'} </button> ); }; export default ThemeToggleButton;
theme y a la función toggleTheme.toggleTheme al hacer click, y mostramos un texto dinámico según el tema actual.En tu componente principal (por ejemplo, App.js), podemos añadir un useEffect que ajuste el <body> para aplicar la clase correspondiente (light u dark) y así poder cambiar la apariencia global usando CSS.
jsx// src/App.js import React from 'react'; import useThemeStore from './stores/useThemeStore'; import ThemeToggleButton from './components/ThemeToggleButton'; function App() { const { theme } = useThemeStore(); // Al cambiar 'theme', modificamos la clase de <body> para que nuestros estilos cambien React.useEffect(() => { document.body.className = theme; }, [theme]); return ( <div> <h1>Mi aplicación con tema {theme}</h1> <ThemeToggleButton /> </div> ); } export default App;
light o dark al body. Puedes definir en tu CSS algo como:
De esta manera, se aplicarán estilos distintos dependiendo del tema.cssbody.light { background-color: white; color: black; } body.dark { background-color: #333; color: white; }
npm start o yarn start).light.dark.dark, pues se recupera desde localStorage.Esto confirma la persistencia y que el usuario conserva el tema seleccionado aun después de recargar la página.
persist en Zustand, que internamente lee y escribe en el localStorage.name.Con esto, tu aplicación conservará el tema seleccionado y el usuario podrá alternarlo cuando lo desee. ¡Listo!