$ npm install mobx-persist --save
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)
persist(schema)(object)
'object' | 'list' | 'map'
or a structured schema object.create(config)
hydrate(key, store, initialState?, customArgs?)
IHydrateResult
extends Promise