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";
@@ -35,17 +35,18 @@ const useTheme = (): [Theme, (mode: Theme) => void] => {
darkModeMediaQuery.removeEventListener("change", handleDarkModeChange);
};
}, [theme]);
return [
const setThemeWithSideEffect = useCallback((newTheme: Theme) => {
setTheme(newTheme);
localStorage.setItem("theme", newTheme);
if (newTheme !== "system") {
document.documentElement.classList.toggle("dark", newTheme === "dark");
}
}, []);
return useMemo(() => [
theme,
useCallback((newTheme: Theme) => {
setTheme(newTheme);
localStorage.setItem("theme", newTheme);
if (newTheme !== "system") {
document.documentElement.classList.toggle("dark", newTheme === "dark");
}
}, []),
];
setThemeWithSideEffect,
], [theme]);
};
export default useTheme;