A small hook wrapping the local storage API
The library exports a useLocalStorage
hook that you call with the result of a
hook that matches the return type of useReducer
. The requirement being that
the value you provide useLocalStorage
should be an array with at least two
values, the first being the value to store in local storage, and the second
being an updater function (e.g. dispatch).
The second argument for the hook is an options object that supports the following:
key
- A string that is used as the key for where the value will be stored in local storagehydrate
- An optional boolean that if true will call the setValue argument when mounted, with the value from localStoragegetItem
- An optional override to the defaultJSON.parse(window.localStorage.getItem(key))
setItem
- An optional override to the defaultwindow.localStorage.setItem(key, JSON.stringify(value))
yarn add @ds-pack/use-local-storage
import { useReducer } from 'react'
import { useLocalStorage } from '@matthamlin/use-local-storage'
function reducer(state, action) {
switch (action.type) {
// useLocalStorage will call your dispatch function with
// { type: 'hydrated', value: Value }
case 'hydrated':
case 'input': {
return {
...state,
value: action.value,
}
}
default: {
return state
}
}
}
function Component() {
let [value, setValue] = useLocalStorage<string>(
useReducer(reducer, { value: 'foo' }),
{
key: 'your-app',
},
)
return (
<label>
Enter your name:
<input
type="text"
value={value}
onChange={({ target: { value } }) => dispatch({ type: 'input', value })}
/>
</label>
)
}
- Typescript
- Babel
- Jest