fix: sync bug

This commit is contained in:
Gabe
2025-11-15 21:05:06 +08:00
parent 4f00492e49
commit c4ccdba268
5 changed files with 31 additions and 10 deletions

View File

@@ -13,5 +13,11 @@ export function useDebouncedCallback(callback, delay) {
[delay]
);
useEffect(() => {
return () => {
debouncedCallback.cancel();
};
}, [debouncedCallback]);
return debouncedCallback;
}

View File

@@ -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) => {

View File

@@ -62,11 +62,13 @@ class Logger {
return;
}
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}`
);
}
}
/**
* 核心日志记录方法

View File

@@ -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;
};
/**

View File

@@ -99,7 +99,7 @@ export default function Options() {
}
return (
<SettingProvider>
<SettingProvider isSettingPage={true}>
<ThemeProvider>
<AlertProvider>
<ConfirmProvider>