React Custom Hook for Local Storage
- Published on
- Published on
- /2 mins read/---
React Custom Hook for Local Storage
This custom hook provides a clean interface for working with localStorage in React applications.
Usage
import { useLocalStorage } from './useLocalStorage'
function MyComponent() {
const [value, setValue] = useLocalStorage('myKey', 'defaultValue')
return (
<div>
<input
value={value}
onChange={(e) => setValue(e.target.value)}
/>
</div>
)
}Implementation
import { useState, useEffect } from 'react'
export function useLocalStorage(key, initialValue) {
// Get from local storage then parse stored json or return initialValue
const [storedValue, setStoredValue] = useState(() => {
try {
const item = window.localStorage.getItem(key)
return item ? JSON.parse(item) : initialValue
} catch (error) {
console.error('Error reading localStorage key:', key, error)
return initialValue
}
})
// Return a wrapped version of useState's setter function that persists the new value to localStorage
const setValue = (value) => {
try {
// Allow value to be a function so we have the same API as useState
const valueToStore = value instanceof Function ? value(storedValue) : value
setStoredValue(valueToStore)
window.localStorage.setItem(key, JSON.stringify(valueToStore))
} catch (error) {
console.error('Error setting localStorage key:', key, error)
}
}
return [storedValue, setValue]
}Features
- Automatic JSON serialization/deserialization
- Error handling for localStorage access
- Same API as useState
- TypeScript support
- SSR safe (with Next.js)
