A stateful react hook for browser storage.
npm install @webcored/react-local-storage
component.jsx
import { useLocalStorage } from "@webcored/react-local-storage";
const [user, userStorage] = useLocalStorage('user');
....typescript
const [user, userStorage] = useLocalStorage<User>('user');
....userStorage.update({ ...user, name: 'new name' });userStorage.remove();Reset's to the default value provided in the key config
userStorage.reset();| View on Github |
|---|
import React from 'react';
import { user } from './storages/user';
import { storageConfig } from "@webcored/react-local-storage";
storageConfig({
namespace: 'app',
delimiter: '/'
react: React
storages: {
user
}
})available configuration options
| config | default | optional | description |
|---|---|---|---|
| namespace | null | true | namespace your storage keys to avoid conflicts especially in the case micro-frontends. |
| delimiter | / | true | delimiter between the namespace and keys, ie: if namespace is app then key of user will be app/user |
| react | null | false | react-local-storage uses useState hook internally which will be abstracted from the given react instance. |
| storage | window.localStorage | true | choose between local or session storage |
| storages | null | true | storage keys config & definition |
Each key can have its own configuration
Configure default values to the localstorage key
import { storageKeyConfig } from "@webcored/react-local-storage"
const user = storageKeyConfig({
defaults: {
name: 'Guest',
email: 'guest@email.com'
}
})typescript
import { storageKeyConfig } from "@webcored/react-local-storage"
const user = storageKeyConfig<User>({
defaults: {
name: 'Guest',
email: 'guest@email.com'
}
})If there is a schema change required in the local storage or in its default value, the storage can be simply migrated to the latest version by incrementing the version of a key. It will invoke the given migration method when there is a conflict with version.
import { storageKeyConfig } from "@webcored/react-local-storage"
const user = storageKeyConfig({
defaults: {
name: 'Guest',
email: 'guest@email.com',
avatar: 'example.com/guest.png'
},
version: 2,
migration: (currentValue, defaultValue) {
return Object.assign({}, ...currentValue, ...defaultValue);
}
})typescript
import { storageKeyConfig } from "@webcored/react-local-storage"
const user = storageKeyConfig<User>({
defaults: {
name: 'Guest',
email: 'guest@email.com',
avatar: 'example.com/guest.png'
},
version: 2,
migration: (currentValue, defaultValue) {
return Object.assign({}, ...currentValue, ...defaultValue);
}
})