A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/rt2zz/redux-persist-transform-immutable below:

rt2zz/redux-persist-transform-immutable: immutable support for redux-persist

Redux Persist Transform Immutable

Add immutable sub-reducer support to redux-persist.

NOTE this handles immutable state on a per-reducer basis. If your top level state is an immutable map, this module will not work.

v5 changes from transitjs to remotedev-serialize. For existing projects that upgrade to v5, all persisted data will be lost upon the initial persist. note It is possible to write an upgrade via a custom transform that supports both formats - if you do write one please PR!

import { createStore, combineReducers } from 'redux'
import { persistStore, persistReducer } from 'redux-persist'
import immutableTransform from 'redux-persist-transform-immutable'

const persistConfig = {
  transforms: [immutableTransform()],
  key: 'root',
  storage
}

const reducer = combineReducers(reducers)
const persistedReducer = persistReducer(persistConfig, reducer)
const store = createStore(persistedReducer)

persistStore(store)

For config, please refer to redux-persist's docs.

By default, immutable Records will be persisted and restored as Maps, because the library has no way of knowing what your Record constructor looks like. To change this behavior and allow a Record to be persisted and restored as a Record instance, you'll need to do two things:

  1. Add a name attribute to your record (this is the second argument to a Record's constructor).
  2. Pass your Record constructor to the transformer's withRecords() function to generate a transformer capable of serializing and deserializing the record.

Minimal example:

import { compose } from 'redux'
import { persistStore, autoRehydrate } from 'redux-persist'
import immutableTransform from 'redux-persist-transform-immutable'

const reducer = combineReducers(reducers)
const store = compose(autoRehydrate(), createStore)(reducer)

const MyRecord = Record({
  foo: 'null'
}, 'MyRecord') // <- Be sure to add a name field to your record

persistStore(
  store,
  {
    transforms: [immutableTransform({records: [MyRecord]})]
  }
)
Avoiding Unnecessary Serialization

By default, redux-persist-immutable-transform will serialize and deserialize all passed objects using transit-immutable-js. If you are concerned about performance, you can either whitelist or blacklist reducer that you know are not immutable.

Example state object:

state = {
  username: 'john',
  imageUri: 'images/profilePic.png',
  friends: Immutable.List([ ... ])
}

Set up the transformer to ignore the string-based reducer keys:

persistStore(store, {
  transforms: [immutableTransform({
    blacklist: ['username', 'imageUri']
  })]
})

/* OR */

persistStore(store, {
  transforms: [immutableTransform({
    whitelist: ['friends']
  })]
})

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4