Merge pull request #207 from samuel871211/perf_useTheme

perf: add `useMemo` to the return value of `useTheme`
This commit is contained in:
Cliff Hall
2025-03-28 17:47:59 -04:00
committed by GitHub

View File

@@ -1,4 +1,4 @@
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
type Theme = "light" | "dark" | "system"; type Theme = "light" | "dark" | "system";
@@ -36,16 +36,14 @@ const useTheme = (): [Theme, (mode: Theme) => void] => {
}; };
}, [theme]); }, [theme]);
return [ const setThemeWithSideEffect = useCallback((newTheme: Theme) => {
theme,
useCallback((newTheme: Theme) => {
setTheme(newTheme); setTheme(newTheme);
localStorage.setItem("theme", newTheme); localStorage.setItem("theme", newTheme);
if (newTheme !== "system") { if (newTheme !== "system") {
document.documentElement.classList.toggle("dark", newTheme === "dark"); document.documentElement.classList.toggle("dark", newTheme === "dark");
} }
}, []), }, []);
]; return useMemo(() => [theme, setThemeWithSideEffect], [theme]);
}; };
export default useTheme; export default useTheme;