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);
}
})