0.3.1 • Published 10 months ago

@blocdigital/uselocalstorage v0.3.1

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

uselocalstorage

Handle interaction with local and session storage

Install

npm install --save @blocdigital/uselocalstorage

Usage

API

FunctionParamsDescription
init\<T>(key: string, data: unknown) => voidSet the data, generally this should be an empty version of the data type
set\<T>(key: string, data: unknown) => voidSet the data, generally you will need to get the data modify it then set it.
get\<T>(key: string) => T | undefinedGet the data.
remove(key: string) => voidRemove a specific key and its contents.
clear() => voidRemove all items from storage
addEventListener(event: EventType, callback: (key?: string) => void, { signal?: AbortSignal, once?: boolean }) => voidAdd as event listener for when this hook is used.
on(event: EventType, callback: (key?: string) => void, { signal?: AbortSignal, once?: boolean }) => voidPseudonym for addEventListener
onAny(callback: (event?: EventType, key?: string) => void, { signal?: AbortSignal, once?: boolean }) => voidAdd event listener, for all events, for when this hook is used
removeEventListener(key: string, callback: (key: string) => void) => voidIf you exactly match an addEventListener event you can remove it
off(key: string, callback: (key: string) => void) => voidPseudonym for removeEventListener
offAny(callback: (key: string) => void) => voidIf you exactly match an onAny function you can remove it

Example

import { useState, useEffect } from 'react';

// Hooks
import useLocalStorage from '@blocdigital/uselocalstorage';

const Example = () => {
  const [state, setState] = useState('hello world');

  // initiate the session storage
  const storage = useLocalStorage('session');

  // initialise the storage state
  useEffect(() => {
    storage.init('state', 'hello world');
  }, [storage]);

  // set up listeners to keep state in sync with storage
  useEffect(() => {
    const ac = new AbortController();

    storage.addEventListener('set', (key) => key === 'state' && setState(storage.get(key)), { signal: ac.signal });

    // remember to tidy up you event listeners
    return () => ac.abort();
  }, [storage]);

  return (
    <div>
      <span>Current state: {state}</span>
      <br />
      <button onClick={() => storage.set('state', String(Date.now()))}>Change State</button>
    </div>
  );
};
0.3.0

10 months ago

0.2.3

11 months ago

0.3.1

10 months ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.4

2 years ago

0.2.2

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago