On this Page
- What Are User Preferences?
- Structuring a Settings Store
- Persisting Preferences Across Sessions
- Syncing Preferences on Login
- Tips for Multi-User or Multi-Device Support
On this Guide
- Lesson 18: Zustand for Authentication and Session Management
- Lesson 19: Managing Forms and Multi-Step Wizards with Zustand
- Lesson 20: Undo/Redo Functionality with State Snapshots
- Lesson 21: Zustand for App-Wide UI State (Modals, Sidebars, Themes)
- Lesson 22: Combining Zustand with React Query for Async Data
- Lesson 23: Real-Time Data Sync with WebSockets and Zustand
- Lesson 24: Storing User Preferences and Settings
- Lesson 25: Migrating from Redux or Context to Zustand
What Are User Preferences?
User preferences include:
- Dark/light mode
- Language or locale
- Sidebar layout
- Grid or list view
- Font size or accessibility options
These are often user-specific and should be persisted across sessions.
Structuring a Settings Store
import { create } from "zustand";
import { persist } from "zustand/middleware";
type SettingsStore = {
darkMode: boolean;
language: "en" | "he";
toggleDarkMode: () => void;
setLanguage: (lang: "en" | "he") => void;
};
export const useSettingsStore = create<settingsstore>()(
persist(
(set) => ({
darkMode: false,
language: "en",
toggleDarkMode: () => set((s) => ({ darkMode: !s.darkMode })),
setLanguage: (lang) => set({ language: lang }),
}),
{
name: "user-settings", // Key in localStorage
}
)
);
Persisting Preferences Across Sessions
Zustandβs persist middleware stores preferences in localStorage:
persist(..., { name: "user-settings" })
β
Values persist on page reload
β
Can also use sessionStorage or cookies
Syncing Preferences on Login
If your backend saves user preferences:
// after login:
const serverSettings = await api.getUserPreferences();
useSettingsStore.setState(serverSettings);
This syncs server-stored settings into your local store.
You can also POST to save changes:
useEffect(() => {
const settings = useSettingsStore.getState();
api.saveUserPreferences(settings);
}, [language, darkMode]);
Tips for Multi-User or Multi-Device Support
- Use a unique key per user if storing locally
- Sync preferences after login/logout
- Consider using a centralized API if preferences are shared between devices
persist(..., { name: `settings-${userId}` });
Summary
- Use Zustand to manage app-wide user settings
- Persist settings using middleware
- Load or overwrite preferences from a backend
- Customize per-user storage keys if needed
Next: Lesson 25 β Migrating from Redux or Context to Zustand