Skip to content

webcored/react-local-storage

Folders and files

NameName
Last commit message
Last commit date
Dec 23, 2021
Dec 28, 2021
Jul 20, 2022
Dec 22, 2021
Dec 22, 2021
Dec 23, 2021
Dec 30, 2021
Dec 26, 2021
Dec 26, 2021
Dec 26, 2021
Dec 28, 2021
Apr 1, 2022
Dec 28, 2021
Dec 21, 2021
Dec 28, 2021
Dec 21, 2021

Repository files navigation

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

....
typescript

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
typescript

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

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'
  }
})
typescript

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