Redux Persist adapter for IndexedDB storage
Storage adapter to use IndexedDB via idb v3 with redux-persist ripped from idb v3 docs > Examples section
Installation
Using npm:
npm install --save @piotr-cz/redux-persist-idb-storage
or Yarn:
yarn add @piotr-cz/redux-persist-idb-storage
Requirements
Setup
Import the storage and include it in persistConfig
when creating Redux store:
// configureStore.js
import createIdbStorage from '@piotr-cz/redux-persist-idb-storage'
const persistConfig = {
key: 'root',
storage: createIdbStorage({name: 'myApp', storeName: 'keyval'}),
serialize: false, // Data serialization is not required and disabling it allows you to inspect storage value in DevTools; Available since redux-persist@5.4.0
deserialize: false, // Required to bear same value as `serialize` since redux-persist@6.0
}
// ...
Server-Side Rendering
When using Server-Side Rendering (SSR), indexedDB won't be available in the environment.
In this case you may use feature detection with a fallback to use default redux-persist storage (which resolves to noop functions):
// configureStore.js
// Redux Persist storage
import defaultStorage from 'redux-persist/lib/storage'
// IndexedDB storage
import createIdbStorage from '@piotr-cz/redux-persist-idb-storage/src'
const persistConfig = {
key: 'root',
storage: globalThis.indexedDB ? createIdbStorage({name: 'myApp', storeName: 'keyval'}) : defaultStorage,
serialize: false,
}
Options
See idb API
name
(optional): IndexedDB Database name. Defaults to 'keyval-store'
.
storeName
(optional): IndexedDB Store name. Defaults to 'keyval'
.
version
(optional): Schema version. Defaults to 1
.
upgradeCallback
(optional): Defaults to upgradeDb => upgradeDb.createObjectStore(options.storeName)
.
Notes
- idb dependency is locked to version ^3.0.0 as 4+ uses proxies which are not supported in older browsers
- credits go to idb authors