ConceptPortal-public/rsconcept/frontend/src/hooks/useLocalStorage.ts

28 lines
758 B
TypeScript
Raw Normal View History

2023-07-25 20:27:29 +03:00
import { useEffect, useState } from 'react';
2023-07-15 17:46:19 +03:00
function getStorageValue<ValueType>(key: string, defaultValue: ValueType) {
const saved = localStorage.getItem(key);
2023-07-25 20:27:29 +03:00
const initial = saved ? JSON.parse(saved) : undefined;
2023-07-15 17:46:19 +03:00
return initial || defaultValue;
}
2023-07-25 20:27:29 +03:00
const useLocalStorage =
<ValueType>(key: string, defaultValue: ValueType):
[ValueType, React.Dispatch<React.SetStateAction<ValueType>>] => {
2023-07-15 17:46:19 +03:00
const [value, setValue] = useState<ValueType>(() => {
return getStorageValue(key, defaultValue);
});
useEffect(() => {
2023-07-25 20:27:29 +03:00
if (value === undefined) {
2023-07-15 17:46:19 +03:00
localStorage.removeItem(key)
} else {
localStorage.setItem(key, JSON.stringify(value));
}
}, [key, value]);
return [value, setValue];
};
2023-07-25 20:27:29 +03:00
export default useLocalStorage;