useSessionStorage
Usage
import { useState, useEffect } from 'react';
type StorageValue<T> = T | null;
interface StorageOptions<T> {
key: string;
defaultValue?: StorageValue<T>;
}
const useSessionStorage = <T>({
key,
defaultValue = null,
}: StorageOptions<T>): [StorageValue<T>, (value: T) => void] => {
const [state, setState] = useState<StorageValue<T>>(() => {
const storedValue = sessionStorage.getItem(key);
if (storedValue !== null) {
return JSON.parse(storedValue) as T;
} else {
return defaultValue;
}
});
useEffect(() => {
if (state === null) {
sessionStorage.removeItem(key);
} else {
sessionStorage.setItem(key, JSON.stringify(state));
}
}, [key, state]);
const setValue = (value: T) => {
setState(value);
};
return [state, setValue];
};
export default useSessionStorage;Last updated