Gathering detailed insights and metrics for use-session-storage-state
Gathering detailed insights and metrics for use-session-storage-state
Gathering detailed insights and metrics for use-session-storage-state
Gathering detailed insights and metrics for use-session-storage-state
React hook that persists data in sessionStorage
npm install use-session-storage-state
Typescript
Module System
Min. Node Version
TypeScript (98.01%)
JavaScript (1.99%)
Built with Next.js • Fully responsive • SEO optimized • Open source ready
Total Downloads
769,037
Last Day
244
Last Week
8,897
Last Month
36,760
Last Year
372,378
MIT License
24 Stars
29 Commits
2 Watchers
2 Branches
1 Contributors
Updated on Aug 03, 2025
Latest Version
19.0.1
Package Id
use-session-storage-state@19.0.1
Unpacked Size
17.46 kB
Size
5.87 kB
File Count
9
Published on
Oct 31, 2024
Cumulative downloads
Total Downloads
Last Day
51.6%
244
Compared to previous day
Last Week
-8.7%
8,897
Compared to previous week
Last Month
9.1%
36,760
Compared to previous month
Last Year
35.7%
372,378
Compared to previous year
25
use-session-storage-state
React hook that persist data in
sessionStorage
React 18 and above:
1npm install use-session-storage-state
⚠️ React 17 and below. For docs, go to the react-17 branch.
1npm install use-session-storage-state@17
use-local-storage-state
that I've been actively maintaining for the past 4 years.Window
storage
event and updates changes across iframe's. Disable with storageSync: false
.sessionStorage
throws an error and can't store the data. Provides a isPersistent
API to let you notify the user their data isn't currently being stored.1import useSessionStorageState from 'use-session-storage-state' 2 3export default function Todos() { 4 const [todos, setTodos] = useSessionStorageState('todos', { 5 defaultValue: ['buy avocado', 'do 50 push-ups'] 6 }) 7}
1import React, { useState } from 'react' 2import useSessionStorageState from 'use-session-storage-state' 3 4export default function Todos() { 5 const [todos, setTodos] = useSessionStorageState('todos', { 6 defaultValue: ['buy avocado'] 7 }) 8 const [query, setQuery] = useState('') 9 10 function onClick() { 11 setQuery('') 12 setTodos([...todos, query]) 13 } 14 15 return ( 16 <> 17 <input value={query} onChange={e => setQuery(e.target.value)} /> 18 <button onClick={onClick}>Create</button> 19 {todos.map(todo => ( 20 <div>{todo}</div> 21 ))} 22 </> 23 ) 24} 25
sessionStorage
isn't saving the data using the isPersistent
propertyThere are a few cases when sessionStorage
isn't available. The isPersistent
property tells you if the data is persisted in sessionStorage
or in-memory. Useful when you want to notify the user that their data won't be persisted.
1import React, { useState } from 'react' 2import useSessionStorageState from 'use-session-storage-state' 3 4export default function Todos() { 5 const [todos, setTodos, { isPersistent }] = useSessionStorageState('todos', { 6 defaultValue: ['buy avocado'] 7 }) 8 9 return ( 10 <> 11 {todos.map(todo => (<div>{todo}</div>))} 12 {!isPersistent && <span>Changes aren't currently persisted.</span>} 13 </> 14 ) 15} 16
sessionStorage
and resetting to the defaultThe removeItem()
method will reset the value to its default and will remove the key from the sessionStorage
. It returns to the same state as when the hook was initially created.
1import useSessionStorageState from 'use-session-storage-state' 2 3export default function Todos() { 4 const [todos, setTodos, { removeItem }] = useSessionStorageState('todos', { 5 defaultValue: ['buy avocado'] 6 }) 7 8 function onClick() { 9 removeItem() 10 } 11}
If you are hydrating your component (for example, if you are using Next.js), your component might re-render twice. This is behavior specific to React and not to this library. It's caused by the useSyncExternalStore()
hook. There is no workaround. This has been discussed in the issues: https://github.com/astoilkov/use-local-storage-state/issues/56.
If you want to know if you are currently rendering the server value you can use this helper function:
1function useIsServerRender() { 2 return useSyncExternalStore(() => { 3 return () => {} 4 }, () => false, () => true) 5}
useSessionStorageState(key: string, options?: SessionStorageOptions)
Returns [value, setValue, { removeItem, isPersistent }]
when called. The first two values are the same as useState()
. The third value contains two extra properties:
removeItem()
— calls sessionStorage.removeItem(key)
and resets the hook to it's default stateisPersistent
— boolean
property that returns false
if sessionStorage
is throwing an error and the data is stored only in-memorykey
Type: string
The key used when calling sessionStorage.setItem(key)
and sessionStorage.getItem(key)
.
⚠️ Be careful with name conflicts as it is possible to access a property which is already in sessionStorage
that was created from another place in the codebase or in an old version of the application.
options.defaultValue
Type: any
Default: undefined
The default value. You can think of it as the same as useState(defaultValue)
.
options.storageSync
Type: boolean
Default: true
Setting to false
doesn't subscribe to the Window storage event. If you set to false
, updates won't be synchronized across iframes.
Note: Unlike localStorage
, sessionStorage
doesn't fire the storage
event across tabs and windows.
options.serializer
Type: { stringify, parse }
Default: JSON
JSON does not serialize Date
, Regex
, or BigInt
data. You can pass in superjson or other JSON
-compatible serialization library for more advanced serialization.
use-storage-state
— Supports localStorage
, sessionStorage
, and any other Storage
compatible API.use-local-storage-state
— A clone of this library but for localStorage
.local-db-storage
— Tiny wrapper around IndexedDB
that mimics localStorage
API.No vulnerabilities found.
@pansy/use-session-storage-state
@plq/use-persisted-state
useState hook with persistence in storage
use-storage-state
React hook that you can wire with any Storage compatible API like `localStorage`, `sessionStorage`, or a custom one.
storage-container-js
This is a package where you can use localStorage or sessionStorage works like a state.