Skip to content

Instantly share code, notes, and snippets.

@jonsmithers
Created June 9, 2023 21:43
Show Gist options
  • Save jonsmithers/19dd72ffe14fd9c4a2d9360f0437a49c to your computer and use it in GitHub Desktop.
Save jonsmithers/19dd72ffe14fd9c4a2d9360f0437a49c to your computer and use it in GitHub Desktop.
useSystemThemePreference
export const useSystemThemePreference = (): 'dark' | 'light' => {
const systemPrefQuery = useMemo(
() => window.matchMedia('(prefers-color-scheme: dark)'),
[]
);
const [systemThemePreference, setSystemThemePreference] = useState<
'dark' | 'light'
>(systemPrefQuery.matches ? 'dark' : 'light');
const onSystemPreference = useCallback(() => {
setSystemThemePreference(systemPrefQuery.matches ? 'dark' : 'light');
}, [systemPrefQuery.matches]);
useEffect(() => {
systemPrefQuery.addEventListener('change', onSystemPreference);
return () => {
systemPrefQuery.removeEventListener('change', onSystemPreference);
};
}, [onSystemPreference, systemPrefQuery]);
return systemThemePreference;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment