Skip to content

Commit 3ac0059

Browse files
committed
perf: add useMemo to the return value of useTheme
1 parent 2890e03 commit 3ac0059

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

client/src/lib/useTheme.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useEffect, useState } from "react";
1+
import { useCallback, useEffect, useMemo, useState } from "react";
22

33
type Theme = "light" | "dark" | "system";
44

@@ -35,17 +35,18 @@ const useTheme = (): [Theme, (mode: Theme) => void] => {
3535
darkModeMediaQuery.removeEventListener("change", handleDarkModeChange);
3636
};
3737
}, [theme]);
38-
39-
return [
38+
39+
const setThemeWithSideEffect = useCallback((newTheme: Theme) => {
40+
setTheme(newTheme);
41+
localStorage.setItem("theme", newTheme);
42+
if (newTheme !== "system") {
43+
document.documentElement.classList.toggle("dark", newTheme === "dark");
44+
}
45+
}, []);
46+
return useMemo(() => [
4047
theme,
41-
useCallback((newTheme: Theme) => {
42-
setTheme(newTheme);
43-
localStorage.setItem("theme", newTheme);
44-
if (newTheme !== "system") {
45-
document.documentElement.classList.toggle("dark", newTheme === "dark");
46-
}
47-
}, []),
48-
];
48+
setThemeWithSideEffect,
49+
], [theme]);
4950
};
5051

5152
export default useTheme;

0 commit comments

Comments
 (0)