From c4ccdba268bccfb655dfff139682191db11eb2a9 Mon Sep 17 00:00:00 2001 From: Gabe Date: Sat, 15 Nov 2025 21:05:06 +0800 Subject: [PATCH] fix: sync bug --- src/hooks/DebouncedCallback.js | 6 ++++++ src/hooks/Setting.js | 12 +++++++++--- src/libs/log.js | 10 ++++++---- src/libs/utils.js | 11 +++++++++-- src/views/Options/index.js | 2 +- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/hooks/DebouncedCallback.js b/src/hooks/DebouncedCallback.js index 9f2daf4..b05ab60 100644 --- a/src/hooks/DebouncedCallback.js +++ b/src/hooks/DebouncedCallback.js @@ -13,5 +13,11 @@ export function useDebouncedCallback(callback, delay) { [delay] ); + useEffect(() => { + return () => { + debouncedCallback.cancel(); + }; + }, [debouncedCallback]); + return debouncedCallback; } diff --git a/src/hooks/Setting.js b/src/hooks/Setting.js index 9c81670..4032949 100644 --- a/src/hooks/Setting.js +++ b/src/hooks/Setting.js @@ -25,13 +25,17 @@ const SettingContext = createContext({ reloadSetting: () => {}, }); -export function SettingProvider({ children }) { +export function SettingProvider({ children, isSettingPage }) { const { data: setting, isLoading, update, reload, - } = useStorage(STOKEY_SETTING, DEFAULT_SETTING, KV_SETTING_KEY); + } = useStorage( + STOKEY_SETTING, + DEFAULT_SETTING, + isSettingPage ? KV_SETTING_KEY : "" + ); useEffect(() => { if (typeof setting?.darkMode === "boolean") { @@ -43,6 +47,8 @@ export function SettingProvider({ children }) { }, [setting?.darkMode, update]); useEffect(() => { + if (!isSettingPage) return; + (async () => { try { logger.setLevel(setting?.logLevel); @@ -53,7 +59,7 @@ export function SettingProvider({ children }) { logger.error("Failed to fetch log level, using default.", error); } })(); - }, [setting]); + }, [isSettingPage, setting?.logLevel]); const updateSetting = useCallback( (objOrFn) => { diff --git a/src/libs/log.js b/src/libs/log.js index 515fcc2..5eda2bf 100644 --- a/src/libs/log.js +++ b/src/libs/log.js @@ -62,10 +62,12 @@ class Logger { return; } - this.config.level = newLevelObject; - console.log( - `[${this.config.prefix}] Log level dynamically set to ${this.config.level.name}` - ); + if (this.config.level.value !== newLevelObject.value) { + this.config.level = newLevelObject; + console.log( + `[${this.config.prefix}] Log level dynamically set to ${this.config.level.name}` + ); + } } /** diff --git a/src/libs/utils.js b/src/libs/utils.js index bb77e89..fac8c23 100644 --- a/src/libs/utils.js +++ b/src/libs/utils.js @@ -59,14 +59,21 @@ export const sleep = (delay) => */ export const debounce = (func, delay = 200) => { let timer = null; - return (...args) => { + + const debouncedFunc = (...args) => { timer && clearTimeout(timer); timer = setTimeout(() => { func(...args); - clearTimeout(timer); timer = null; }, delay); }; + + debouncedFunc.cancel = () => { + clearTimeout(timer); + timer = null; + }; + + return debouncedFunc; }; /** diff --git a/src/views/Options/index.js b/src/views/Options/index.js index 32f9327..9aeb4a8 100644 --- a/src/views/Options/index.js +++ b/src/views/Options/index.js @@ -99,7 +99,7 @@ export default function Options() { } return ( - +