From 3ac00598ff76a13290584aed8c78f8e5a8db41ac Mon Sep 17 00:00:00 2001 From: yusheng chen Date: Sun, 23 Mar 2025 21:29:46 +0800 Subject: [PATCH] perf: add `useMemo` to the return value of `useTheme` --- client/src/lib/useTheme.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/client/src/lib/useTheme.ts b/client/src/lib/useTheme.ts index c73159b..8e598e1 100644 --- a/client/src/lib/useTheme.ts +++ b/client/src/lib/useTheme.ts @@ -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;