perf: add useMemo to the return value of useTheme

This commit is contained in:
yusheng chen
2025-03-23 21:29:46 +08:00
parent 2890e036ed
commit 3ac00598ff

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,17 @@ 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;