Skip to main content

useStorage

Used to get and store variables from localStorage.

import { useCallback, useState, useEffect } from 'react';

function useStorage(key, defaultValue, storageObject) {
const [value, setValue] = useState(() => {
const jsonValue = storageObject.getItem(key);

if (jsonValue !== null) return JSON.parse(jsonValue);

if (typeof initialValue === 'function') {
return defaultValue();
} else {
return defaultValue;
}
});

useEffect(() => {
if (value === undefined) return storageObject.removeItem(key);

storageObject.setItem(key, JSON.stringify(value));
}, [key, value, storageObject]);
}

const remove = useCallback(() => {
setValue(undefined);
}, []);

export function useLocalStorage(key, defaultValue) {
return useStorage(key, defaultValue, window.localStorage);
}

export function useSessionStorage(key, defaultValue) {
return useStorage(key, defaultValue, window.sesstionStorage);
}

return [value, setValue, remove];

useStorage alternative

import { useState } from 'react';

const useLocalStorage = (key = '', initialValue = '') => {
const [state, setState] = useState({
try {
const item = window.localStorage.getItem(key);

return item ? JSON.parse(item) : initialValue;
} catch (error) {
return initialValue;
}
});

const setLocalStorageState = newState => {
try {
const newStateValue = typeof newState === 'function' ? newState(state) : newState;
setState(newStateValue);

window.localStorage.setItem(key, JSON.stringify(newStateValue));
} catch (error) {
console.error(`Unable to store new value for ${key} in localStorage.`);
}
}

return [state, setLocalStorage];
};

export default useLocalStorage;

Usage of useLocalStorage

import { useLocalStorage } from './hooks';

const defaultSettings = {
notifications: 'weekly';
}

export default function MyComponent() {
const [appSetings, setAppSettings] = useLocalStorage('app-settings', defaultSettings)

return (
// Component
)
}