Código fuente que permita garantizar que la selecc...

Tạo vào: 15 tháng 3, 2025

Trả lời bằng O1 bởi Chat01

Câu hỏi

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.

Suy nghĩ

Setting up the workspace

I'm thinking about how to code in Spanish using React, Zustand, and local storage. The aim is a theme switch from light to dark, with persistence across page reloads.

Crafting theme store

Starting with Zustand, I'm curating a theme store to sync 'light' themes with local storage. Toggle logic is being mapped out to ensure seamless theme management.

Kicking off theme management

I’m setting up theme persistence with Zustand. Utilizing the 'persist' middleware simplifies integration with local storage, enriching user experience.

Reasoned for 6 seconds

Trả lời

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.


1. Instalación de dependencias

Asegúrate de tener instalado Zustand:

bash
npm install zustand

O con Yarn:

bash
yarn add zustand

2. Creación del store de Zustand con persistencia en localStorage

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;

Explicación

  1. persist: Middleware de Zustand que permite guardar el estado global en localStorage y recuperarlo en recargas.
  2. theme: Estado que define si el tema es light (claro) u dark (oscuro).
  3. toggleTheme: Función que alterna el valor del tema en el store.
  4. name: Clave bajo la cual se almacenará el estado en el localStorage ("theme").
  5. getStorage: Indica explícitamente que el almacenamiento sea localStorage.

3. Creación del componente reutilizable para cambiar el tema

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;

Explicación

  1. useThemeStore: Consumimos el store de Zustand para acceder a theme y a la función toggleTheme.
  2. button: Llamamos a la función toggleTheme al hacer click, y mostramos un texto dinámico según el tema actual.

4. Usando el tema para modificar el estilo de la aplicación

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;

Explicación

  1. document.body.className = theme: Asignamos la clase light o dark al body. Puedes definir en tu CSS algo como:
    css
    body.light { background-color: white; color: black; } body.dark { background-color: #333; color: white; }
    De esta manera, se aplicarán estilos distintos dependiendo del tema.

5. Pruebas finales de persistencia y usabilidad

  1. Inicia tu aplicación (por ejemplo con npm start o yarn start).
  2. Por defecto, se asignará el tema light.
  3. Haz clic en el botón para alternar a dark.
  4. Recarga la página. Verás que el tema permanecerá en dark, pues se recupera desde localStorage.
  5. Si vuelves a cambiar de tema y recargas, se mantendrá el nuevo valor.

Esto confirma la persistencia y que el usuario conserva el tema seleccionado aun después de recargar la página.


Comentarios finales

  • La clave de la persistencia es el uso del middleware persist en Zustand, que internamente lee y escribe en el localStorage.
  • Si en algún momento quieres cambiar la clave de localStorage, basta con modificar la propiedad name.
  • Este patrón de “store + componente toggler + estilos dinámicos” te permite escalar el manejo de temas a toda la aplicación sin complicaciones.

Con esto, tu aplicación conservará el tema seleccionado y el usuario podrá alternarlo cuando lo desee. ¡Listo!

Chia sẻ Q&A này