diff --git a/src/hooks/Setting.js b/src/hooks/Setting.js index dfd64a2..71e7e68 100644 --- a/src/hooks/Setting.js +++ b/src/hooks/Setting.js @@ -5,16 +5,13 @@ import { createContext, useCallback, useContext, useMemo } from "react"; import { debounce } from "../libs/utils"; const SettingContext = createContext({ - setting: {}, + setting: null, updateSetting: async () => {}, reloadSetting: async () => {}, }); export function SettingProvider({ children }) { - const { data, update, reload, loading } = useStorage( - STOKEY_SETTING, - DEFAULT_SETTING - ); + const { data, update, reload } = useStorage(STOKEY_SETTING, DEFAULT_SETTING); const syncSetting = useMemo( () => @@ -32,7 +29,7 @@ export function SettingProvider({ children }) { [update, syncSetting] ); - if (loading) { + if (!data) { return; } diff --git a/src/hooks/Storage.js b/src/hooks/Storage.js index f368af5..b84da0b 100644 --- a/src/hooks/Storage.js +++ b/src/hooks/Storage.js @@ -1,9 +1,9 @@ import { useCallback, useEffect, useState } from "react"; import { storage } from "../libs/storage"; -export function useStorage(key, defaultVal = null) { - const [loading, setLoading] = useState(true); - const [data, setData] = useState(defaultVal); +export function useStorage(key, defaultVal) { + const [loading, setLoading] = useState(false); + const [data, setData] = useState(null); const save = useCallback( async (val) => { @@ -15,7 +15,7 @@ export function useStorage(key, defaultVal = null) { const update = useCallback( async (obj) => { - setData((pre) => ({ ...pre, ...obj })); + setData((pre = {}) => ({ ...pre, ...obj })); await storage.putObj(key, obj); }, [key] @@ -27,27 +27,37 @@ export function useStorage(key, defaultVal = null) { }, [key]); const reload = useCallback(async () => { - const val = await storage.getObj(key); - if (val) { - setData(val); - } else if (defaultVal) { - setData(defaultVal); - await storage.setObj(key, defaultVal); + try { + setLoading(true); + const val = await storage.getObj(key); + if (val) { + setData(val); + } + } catch (err) { + console.log("[storage reload]", err.message); + } finally { + setLoading(false); } - }, [key, defaultVal]); + }, [key]); useEffect(() => { (async () => { try { setLoading(true); - await reload(); + const val = await storage.getObj(key); + if (val) { + setData(val); + } else if (defaultVal) { + setData(defaultVal); + await storage.setObj(key, defaultVal); + } } catch (err) { - // + console.log("[storage load]", err.message); } finally { setLoading(false); } })(); - }, [reload]); + }, [key, defaultVal]); return { data, save, update, remove, reload, loading }; } diff --git a/src/views/Options/Rules.js b/src/views/Options/Rules.js index d53de57..514ba55 100644 --- a/src/views/Options/Rules.js +++ b/src/views/Options/Rules.js @@ -526,6 +526,10 @@ function UserRules({ subRules }) { } }, [showAdd]); + if (!rules.list) { + return; + } + return (