Skip to main content

useLocalStorage

The useLocalStorage hook provides a convenient way to manage state that is persisted in localStorage. It allows you to retrieve, set, and persist values across page reloads, making it ideal for saving user preferences or session data.

Usage

import { useEffect, useState } from 'react';
import { useLocalStorage } from 'hooks-ts';

export default function UseLocalStorageExample() {
const [count, setCount] = useState(0);
const [value, setValue] = useLocalStorage<number>('count', 0);

useEffect(() => {
setValue(count);
}, [count, setValue]);
return (
<div>
<p>Count: {value}</p>
<button
onClick={() => {
setCount(() => count + 1);
}}
>
Increment
</button>
<button
onClick={() => {
setCount(() => count - 1);
}}
>
Decrement
</button>
</div>
);
}

Returns

storedValue: T - The current value stored in localStorage, or the initialValue if no value is found.

setValue: (value: T) => void - A function to update the storedValue and save the updated value to localStorage.

Hook

import { useState } from 'react';

export function useLocalStorage<T>(
key: string,
initialValue: T,
): [T, (value: T) => void] {
const [storedValue, setStoredValue] = useState<T>(() => {
try {
const item = window.localStorage.getItem(key);
return item ? (JSON.parse(item) as T) : initialValue;
} catch (error) {
console.error(error);
return initialValue;
}
});

const setValue = (value: T) => {
try {
setStoredValue(value);
window.localStorage.setItem(key, JSON.stringify(value));
} catch (error) {
console.error(error);
}
};

return [storedValue, setValue];
}