Skip to content

Instantly share code, notes, and snippets.

@RauliL
Created August 22, 2021 12:52
Show Gist options
  • Save RauliL/8630e3118be7fb554036edab4023d50d to your computer and use it in GitHub Desktop.
Save RauliL/8630e3118be7fb554036edab4023d50d to your computer and use it in GitHub Desktop.
React hook for determining whether user prefers dark mode or not
export const usePreferDarkMode = (): boolean => {
const [darkMode, setDarkMode] = useState<boolean>(
window.matchMedia
? window.matchMedia('(prefers-color-scheme: dark)').matches
: false
);
useEffect(() => {
const mediaQueryList = window.matchMedia
? window.matchMedia('(prefers-color-scheme: dark)')
: undefined;
let changeListener: () => void | undefined;
if (mediaQueryList) {
changeListener = () => {
setDarkMode(mediaQueryList.matches);
};
mediaQueryList.addEventListener('change', changeListener);
}
return () => {
if (mediaQueryList) {
mediaQueryList.removeEventListener('change', changeListener);
}
};
}, []);
return darkMode;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment