1.0.1 • Published 2 years ago

@webcored/react-local-storage v1.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

React Local Storage

A stateful react hook for browser storage.

build npm downloads typescript contributions

Why?

Install

npm install @webcored/react-local-storage

Usage

component.jsx

import { useLocalStorage } from "@webcored/react-local-storage";

const [user, userStorage] = useLocalStorage('user');

....
const [user, userStorage] = useLocalStorage<User>('user');
  
....
update
userStorage.update({ ...user, name: 'new name' });
remove
userStorage.remove();
reset

Reset's to the default value provided in the key config

userStorage.reset();

Sample app

View on Github
View on Github

Configurations

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

configdefaultoptionaldescription
namespacenulltruenamespace your storage keys to avoid conflicts especially in the case micro-frontends.
delimiter/truedelimiter between the namespace and keys, ie: if namespace is app then key of user will be app/user
reactnullfalsereact-local-storage uses useState hook internally which will be abstracted from the given react instance.
storagewindow.localStoragetruechoose between local or session storage
storagesnulltruestorage keys config & definition

Key configurations

Each key can have its own configuration

Defaults

Configure default values to the localstorage key

import { storageKeyConfig } from "@webcored/react-local-storage"

const user = storageKeyConfig({
  defaults: {
    name: 'Guest',
    email: 'guest@email.com'
  }
})
import { storageKeyConfig } from "@webcored/react-local-storage"

const user = storageKeyConfig<User>({
  defaults: {
    name: 'Guest',
    email: 'guest@email.com'
  }
})

Versions & Migrations

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