From 54049b0d3551342aaeb7f3bfb2ce88fb841dec17 Mon Sep 17 00:00:00 2001 From: NilsUeter Date: Fri, 5 Apr 2024 17:03:19 +0200 Subject: [PATCH] fix crash when localStorage full --- src/helpers/useLocalStorage.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/helpers/useLocalStorage.js b/src/helpers/useLocalStorage.js index fbb66d2..d5cefcb 100644 --- a/src/helpers/useLocalStorage.js +++ b/src/helpers/useLocalStorage.js @@ -8,8 +8,7 @@ export function useLocalStorage(key, initValue) { } if (initValue) { - localStorage.setItem(key, initValue); - window.dispatchEvent(new Event("storage")); + trySettingLocalStorage(key, initValue, setState); } return initValue; }); @@ -18,9 +17,8 @@ export function useLocalStorage(key, initValue) { if (!state || state === "undefined") { localStorage.removeItem(key); } else { - localStorage.setItem(key, state); + trySettingLocalStorage(key, state, setState); } - window.dispatchEvent(new Event("storage")); }, [key, state]); useEffect(() => { @@ -32,8 +30,7 @@ export function useLocalStorage(key, initValue) { } if (initValue) { - localStorage.setItem(key, initValue); - window.dispatchEvent(new Event("storage")); + trySettingLocalStorage(key, initValue, setState); } return initValue; }); @@ -44,3 +41,13 @@ export function useLocalStorage(key, initValue) { return [state, setState]; } + +const trySettingLocalStorage = (key, value, setState) => { + try { + localStorage.setItem(key, value); + window.dispatchEvent(new Event("storage")); + } catch (e) { + console.error(e); + setState(value); + } +};