context-storage

react hook for localstorage

Usage no npm install needed!

<script type="module">
  import contextStorage from 'https://cdn.skypack.dev/context-storage';
</script>

README

Context Storage

npm gzip size Build Status Code Coverage MIT Licensed

React hook for sharing localStorage via context.

values are automatically converted to and from JSON.

Install

$ npm install --save context-storage

or

$ yarn add context-storage

requires: any version of react with hooks. (react >= 16.8.0)

Usage

import React from 'react'
import createStorage from 'context-storage'

const [Provider, useStorage] = createStorage('local-storage-key')

const Title = () => <h1>Hello {useStorage()[0]}!</h1>

const UserNameInput = () => {
  const [name, setName] = useStorage()
  const handleChange = ({ target }) => setName(target.value)
  return <input value={name || ''} onChange={handleChange} />
}

export const App = () => (
  <Provider>
    <Title />
    <UserNameInput />
  </Provider>
)

Arguments

key is the only required argument.

name type description
key string which key in localStorage to use
fallback any fallback when localStorage is empty
replacer function︱array passed to JSON.stringify
reviver function passed to JSON.parse
storage object with getItem and setItem methods

Implementation

the value will always be encoded as JSON when saving to localStorage. and decoded when read back.

it's safe to use objects and arrays, as long as they are non-circular.

following JSON standards, it's to be expected that, without custom replacer/reviver:

  • prototypes will be lost;
  • Functions will get discarded;
  • Dates will be cast into ISO 8601 strings.

Map and Set can be used with custom replacer and reviver arguments.