Persistence
To survive hard refreshes from the user, your state can be persisted to sessionStorage automatically.
This will re-hydrate your store on initialisation.
// An initialised store. Params omitted for brevity
const store = createAppState('an.example.store', {
persist: 'food' // this must be a unique namespace for the store
})createPersist function
You can optionally save state to window.localStorage (for persistence across browser sessions) using the createPersist function:
import { createAppState, createPersist } from 'https://cdn.skypack.dev/ficusjs@6'
// An initialised store. Params omitted for brevity
const store = createAppState('an.example.store', {
persist: createPersist('food', 'local')
})When using the createPersist function, the following arguments must be supplied:
| Argument | Type | Required | Description |
|---|---|---|---|
namespace | string | true | The unique namespace for the store |
storage | string | true | The storage mechanism to use - either local for window.localStorage or session for window.sessionStorage (default) |
options | object | Persistence options. See options below. |
Options
Options can be provided when creating persistence.
import { createAppState, createPersist } from 'https://cdn.skypack.dev/ficusjs@6'
// An initialised store. Params omitted for brevity
const store = createAppState('an.example.store', {
initialState: {
count: 0,
currentRun: 0
},
persist: createPersist('food', 'local', {
clearOnReload: true,
saveState (state) {
return {
count: state.count
}
}
})
})options.clearOnReload
Setting options.clearOnReload to true will detect the browser reload state using
the window.performance API and clear the persistence
if a reload type is detected.
createPersist('food', 'local', {
clearOnReload: true
})options.saveState
Setting options.saveState provides a way to persist specific data different to that of the store state.
This is useful when the store state contains functions or other data that cannot be serialised into a string when saved
to window.sessionStorage or window.localStorage.
createPersist('food', 'local', {
saveState (state) {
return {
// return properties of state to persist
}
}
})The saveState function is passed the current state and must return an object of data to be serialised into a string.
Custom persistence
You can provide a custom class and persist your application state in whichever way you choose.
Four methods must be implemented:
| Method | Description |
|---|---|
setState(state) | Save the state in the persistence store |
getState() | Retrieve the state from the persistence store |
lastUpdated() | Retrieve the last updated time of the state in milliseconds since the Unix Epoch |
removeState() | Remove the state from the persistence store |
import { createAppState } from 'https://cdn.skypack.dev/ficusjs@6'
class MyCustomPersist {
setState (state) {
// set the state
}
getState () {
// get the state
}
lastUpdated () {
// get the last updated time in milliseconds since the Unix Epoch
}
removeState () {
// remove the state - this is called by default when setState is null
}
}
// An initialised store. Params omitted for brevity
const store = createAppState('an.example.store', {
persist: new MyCustomPersist()
})