Skip to content

Instantly share code, notes, and snippets.

@shettayyy
Created January 12, 2022 18:29
Show Gist options
  • Save shettayyy/7810bb88e65f60d4b09bba00edd054e2 to your computer and use it in GitHub Desktop.
Save shettayyy/7810bb88e65f60d4b09bba00edd054e2 to your computer and use it in GitHub Desktop.
Hook to switch the color scheme
import { useCallback } from 'react';
import useLocalStorage from 'use-local-storage';
enum ColorScheme {
Dark = 'dark',
Light = 'light',
}
const useTheme = (): [`${ColorScheme}`, () => void] => {
const isUserDefaultThemeDark = window.matchMedia(
`(prefers-color-scheme: ${ColorScheme.Dark})`,
).matches;
const [theme, setTheme] = useLocalStorage<`${ColorScheme}`>(
'theme',
isUserDefaultThemeDark ? ColorScheme.Dark : ColorScheme.Light,
);
const switchTheme = useCallback(() => {
const newTheme =
theme === ColorScheme.Light ? ColorScheme.Dark : ColorScheme.Light;
setTheme(newTheme);
}, [setTheme, theme]);
return [theme, switchTheme];
};
export default useTheme;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment