From 3d656cf5b08ebe8f3176e92731ecd2f39265c383 Mon Sep 17 00:00:00 2001 From: Gabe Yuan Date: Fri, 1 Sep 2023 16:39:57 +0800 Subject: [PATCH] use debounce to sync setting --- src/hooks/Setting.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/hooks/Setting.js b/src/hooks/Setting.js index 04e6f8d..03226e1 100644 --- a/src/hooks/Setting.js +++ b/src/hooks/Setting.js @@ -2,7 +2,8 @@ import { STOKEY_SETTING, DEFAULT_SETTING } from "../config"; import { useStorage } from "./Storage"; import { useSync } from "./Sync"; import { trySyncSetting } from "../libs/sync"; -import { createContext, useCallback, useContext } from "react"; +import { createContext, useCallback, useContext, useMemo } from "react"; +import { debounce } from "../libs/utils"; const SettingContext = createContext({ setting: null, @@ -17,14 +18,22 @@ export function SettingProvider({ children }) { updateSync, } = useSync(); + const syncSetting = useMemo( + () => + debounce(() => { + trySyncSetting(); + }, [1000]), + [] + ); + const updateSetting = useCallback( async (obj) => { const updateAt = settingUpdateAt ? Date.now() : 0; await update(obj); await updateSync({ settingUpdateAt: updateAt }); - trySyncSetting(); + syncSetting(); }, - [settingUpdateAt, update, updateSync] + [settingUpdateAt, update, updateSync, syncSetting] ); return (