Skip to content
persist mobx stores
Branch: master
Clone or download
Latest commit a0bb0ea Aug 19, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
dev dev example upgrade for mobx 4 Apr 10, 2018
examples/rn test for object array Aug 10, 2017
lib optional hydrate parameter customArgs Nov 13, 2017
src optional hydrate parameter customArgs Nov 13, 2017
.gitignore add test for no decorator Jan 7, 2017
LICENSE.md
README.md update readme revert #48 Aug 18, 2018
index.html change structure for dev Jan 3, 2017
package.json update readme revert #48 Aug 18, 2018
server.js
tsconfig.json dev example upgrade for mobx 4 Apr 10, 2018

README.md

Mobx Persist

npm version

$ npm install mobx-persist --save

Usage

import { observable } from 'mobx'
import { create, persist } from 'mobx-persist'

class SomeItem {
    @persist @observable  name = 'some'
    @persist @observable count = 0
}

class SomeStore {
    @persist('object') @observable         obj = { a: 1, b: 2 }
    @persist('map')    @observable   stringMap = observable.map<string>({})
    @persist('list')   @observable     numList = [1,2,3,4]
    @persist('object', SomeItem) @observable s = new SomeItem
    @persist('map', SomeItem)    @observable m = observable.map<SomeItem>({})
    @persist('list', SomeItem)   @observable l = []
}

const hydrate = create({
    storage: localForage,   // or AsyncStorage in react-native.
                            // default: localStorage
    jsonify: false  // if you use AsyncStorage, here shoud be true
                    // default: true
})

// create the state
export const someStore = new SomeStore()
hydrate('some', someStore).then(() => console.log('someStore has been hydrated'))

without decorators

const data = observable({
    title: 'no decorator',
    someObject: {
        a: 1,
        b: 'b',
    },
    someArray: [{
        c: 1,
        d: 'd'
    }]
})
const schema = {
    title: true,
    someObject: {
        type: 'object',
        schema: {
            a: true,
            b: true
        }
    },
    someArray: {
        type: 'list',
        schema: {
            c: true,
            d: true
        }
    }
}
export const someStore = persist(schema)(data)
hydrate('some', someStore).then(() => console.log('someStore has been hydrated'))

with initial state

const initialState = window.__STATE__.some || {
    obj: { a: 2, b: 1 }
}
export const someStore = new SomeStore()

hydrate('some', someStore, initialState)
    .then(() => console.log('some hydrated'))

re-hydration

const result = hydrate('some', someStore, initialState)
const rehydrate = result.rehydrate
result.then(() => console.log('some hydrated'))

setTimeout(() => {
    rehydrate().then(() => console.log('rehydrated'))
}, 3000)

API

persist(schema)(object)

  • arguments
    • schema string/object Describes the type of data you are planning to persist. Not needed for JS primitive types. Options: 'object' | 'list' | 'map' or a structured schema object.
    • observable any The observable that you are persisting.
  • returns a persistence-enabled version of observable

create(config)

  • arguments
    • config object Describes the storage container you want your data to reside in.
      • storage localForage/AsyncStorage/localStorage localForage-style storage API. localStorage for Web (default), AsyncStorage for React Native
      • jsonify bool Enables serialization as JSON
      • debounce number Debounce interval applied to storage calls (in miliseconds, default 0).
  • returns
    • hydrate function hydrate(key, store, initialState?, customArgs?)
      • key string The key of your datastore that you want to hydrate from your persisted record.
      • store object The store in which that key resides.
      • initialState object Optional initial state the store is seeded with.
      • customArgs object Optional custom arguments that are available during the deserialization process which can be used to pass in e.g. stores to model constructors during deserialization. See https://github.com/mobxjs/serializr#6-use-custom-arguments-to-inject-stores-to-models
      • returns IHydrateResult

interface IHydrateResult

extends Promise

  • methods
    • rehydrate function
      • returns IHydrateResult

Examples

Dependency

You can’t perform that action at this time.