0.0.1 • Published 3 years ago

gritzkoo-test-package v0.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

useLocalStorageReducer

npm version Tag Status License Status Issues Status

A react hook that allows you to use the power of browser localstorage and the useReducer react hook combined!

The API is the same, and you'll see no difference between them!

Example live action

Peek 2021-03-06 15-36

You can try this live version on: https://penseapp-uselocalstoragereduce.web.app/

TL;DR

import { useLocalStorageReducer } from "@penseapp/useLocalStorageReducer";

export interface ExampleContextInterface {
  field1: string;
}

export type ExampleAction = UPDATE_STATE; // Your reducers used in switch

const [stateExample, dispatchExample] = useLocalStorageReducer<
  ExampleContextInterface,
  ExampleAction
>(
  "localStorage-key",
  Reducer,
  exampleInitialState,
  60 * 60 // 1 hour
);

How to install

yarn add @penseapp/uselocalstoragereducer

or

npm i @penseapp/uselocalstoragereducer

How to use

You need to implement the reducer/provider on your side. If you want a suggestion to organize the useLocalStorageReducer, please check the files inside the folder playground/src/ExampleContext. And look at the file ExampleContext.tsx

import { useLocalStorageReducer } from "@penseapp/useLocalStorageReducer";

Simple change the useReducer to useLocalStorageReducer on any hooks and it's done. Now you can reload your browser and your state will maintein

- import React, { useReducer } from "react";
+ import React from "react";
+ import { useLocalStorageReducer } from "@penseapp/useLocalStorageReducer";

const App: React.FC = () => {
-  const [state, setstate] = useReducer(reducer, initialState);
+  const [state, setstate] = useLocalStorageReducer<I, A>('keyName', reducer, initialState, false);
// I: Your object
// A: Your action

  return (
    <>
      Your React component...
    </>
  );
};

export default App;

API / Props

NameTypeRequiredDefaultDescription
keystringtrueKey name from localStorage (Should be unique)
reducerReact Reducertruehttps://reactjs.org/docs/hooks-reference.html#usereducer
initialValueany (Generic)trueSame as the useReducer hook
expirenumber or falsefalse60 * 30 (seconds)Time in seconds to expiry (false to infinite)

localStorage expire

This lib use as dependecy the expired-storage, so you can controll your state by how much time it should persist on localStorage

You have two options:

  • Set the time in seconds
  • Set false to infinite

Examples

import Reducer from "your-reducer";

// Never expires (infinite)
const [state, setstate] = useLocalStorageReducer<boolean>(
  "keyName",
  Reducer,
  { field1: "example" },
  false
);

// Expires in 1 minute
const [state, setstate] = useLocalStorageReducer<boolean>(
  "keyName",
  Reducer,
  { field1: "example" },
  60
);

// Expires in 1 hour
const [state, setstate] = useLocalStorageReducer<boolean>(
  "keyName",
  Reducer,
  { field1: "example" },
  60 * 60 * 1
); // 3600 seconds

// Expires in 12 hours
const [state, setstate] = useLocalStorageReducer<boolean>(
  "keyName",
  Reducer,
  { field1: "example" },
  60 * 60 * 12
); // 43200 seconds

Running local

Git clone this repository

git clone git@github.com:penseapp/useLocalStorageReducer.git

Go to repository folder

cd useLocalStorageReducer

Install and start playground repository

yarn && yarn install:playground && yarn start:playground