Código fuente que permita garantizar que la selecc...
बनाया गया: 15 मार्च 2025
बनाया गया: 15 मार्च 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!