Skip to main content

Dark mode

This hook detects whether the user's device is configured to be in dark mode. It automatically updates when the device's mode changes.

use-dark-mode.tsx
import { useEffect, useState } from 'react';

const matchMedia =
typeof window !== 'undefined'
? window.matchMedia('(prefers-color-scheme: dark)')
: undefined;

export function useDarkMode() {
const [isDarkMode, setIsDarkMode] = useState(matchMedia?.matches);

useEffect(() => {
const handler = () => setIsDarkMode(matchMedia?.matches);

matchMedia?.addEventListener('change', handler);

return () => matchMedia?.removeEventListener('change', handler);
}, []);

return isDarkMode ?? false;
}