mst-easy-storage

Brings storage support to mobx-state-tree for React Native projects.

Usage no npm install needed!

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

README

mst-easy-storage

A mobx-state-tree extension granting your models React Native's AsyncStorage powers of persistance.

Requirements

  • mobx-state-tree
  • react-native
  • @react-native-async-storage/async-storage

NOTE: @react-native-community/async-storage is DEPRECATED!

Installing

yarn add mst-easy-storage

Usage

The following async actions are added:

import { types } from "mobx-state-tree"
import { withStorage } from "mst-easy-storage"

export const NiceThingsModel = types
  .model("NiceThings")
  .props({
    unicorns: true,
    dragons: true,
    cake: true,
    spiders: false,
    nickleback: false,
  })
  .actions(self => ({
    setSpiders(value: boolean) {
      self.spiders = value
    },
  }))
  .extend(withStorage({ key: "nice.things" })) // <-- 🎉

Now you can load it:

async demo () {
  // create your model as usual
  const happy = NiceThingsModel.create()

  // now load the data from async storage
  await happy.load()

  // and when you change something
  happy.setSpiders(true)

  // it will automatically save back to async storage!
}

Options

withAsyncStorage() accepts an optional object as a parameter with these keys:

key type what it does
key string The key to use when saving to AsyncStorage (default: the model type name)
autoSave boolean Should we automatically save when any values change on the model? (default: true)
mode inclusive , exclusive, none Filtering mode (default: none)
names string[] A list of property names that will be filtered as the mode specified.

Contributing?

Yes plz!

Fork it, Clone it, Branch it, Yarn it
Build it, Test it, Push it, PR it