React Hooks Patterns/Persist state to localStorage

Sync component state with localStorage.

Section: Common UI Hooks

Persist state to localStorage

tsx
tsx
function useLocalStorage<T>(key: string, initialValue: T) {
  const [value, setValue] = useState<T>(() => {
    const raw = localStorage.getItem(key);
    return raw ? JSON.parse(raw) as T : initialValue;
  });
  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(value));
  }, [key, value]);
  return [value, setValue] as const;
}
Explanation

A classic custom hook for persistence; remember browser-only constraints if server rendering is involved.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Common UI Hooks
Track previous value
Store the previous render’s value.
OpenIn sheettsxsame section
Respond to media queries
Expose a boolean that tracks a CSS media query.
OpenIn sheettsxsame section
Handle clicks outside an element
Close menus or popovers when a click happens outside a ref.
OpenIn sheettsxsame section
Basic custom hook
Extract reusable stateful logic into a function.
OpenIn sheettsx3 tag match
Custom hook with options object
Prefer options objects for extensible APIs.
OpenIn sheettsx3 tag match
Return object from a custom hook
Use named returns for richer APIs.
OpenIn sheettsx3 tag match