Я использую реагирующий нативный Ignite Andross Boilerplate и пытаюсь сохранить состояние навигации, чтобы при закрытии / открытии пользователем приложения оно возвращалось к предыдущему экрану.
Например: пользователь заполняет форму регистрации, затем закрывает приложение и возвращается позже, чтобы закончить, где бы он ни остановился.
Поскольку с помощью Ignite из коробки предоставляется постоянное резервное копирование, я подумал, что могу просто добавить редуктор навигации в белый список сохранения и позволить редуксу сохранить его работу, сохранив мое состояние навигации в локальном хранилище.
Итак, я сделал это:
// App/Config/ReduxPersist.js
import immutablePersistenceTransform from '../Services/ImmutablePersistenceTransform'
import { AsyncStorage } from 'react-native'
// More info here: https://shift.infinite.red/shipping-persistant-reducers-7341691232b1
const REDUX_PERSIST = {
active: true,
reducerVersion: '1.1',
storeConfig: {
key: 'primary',
storage: AsyncStorage,
// Reducer keys that you do NOT want stored to persistence here.
blacklist: ['login', 'search'],
// Optionally, just specify the keys you DO want stored to persistence.
// An empty array means 'don't store any reducers' -> infinitered/ignite#409
whitelist: ['nav'],
transforms: [immutablePersistenceTransform]
}
}
export default REDUX_PERSIST
Дело в том ... Я получил эту ошибку в результате:
И как-то я понял, что виноват был immutablePersistenceTransform
. Как я это узнал? Ну ... я не сделал! Я только что увидел, что единственное, что было неизменным, - это преобразование, и прокомментировал это.
Так что, когда мой код следующий, он работает:
// App/Config/ReduxPersist.js
import immutablePersistenceTransform from '../Services/ImmutablePersistenceTransform'
import { AsyncStorage } from 'react-native'
// More info here: https://shift.infinite.red/shipping-persistant-reducers-7341691232b1
const REDUX_PERSIST = {
active: true,
reducerVersion: '1.1',
storeConfig: {
key: 'primary',
storage: AsyncStorage,
// Reducer keys that you do NOT want stored to persistence here.
blacklist: ['login', 'search'],
// Optionally, just specify the keys you DO want stored to persistence.
// An empty array means 'don't store any reducers' -> infinitered/ignite#409
whitelist: ['nav'],
//transforms: [immutablePersistenceTransform]
}
}
export default REDUX_PERSIST
// Приложение / Услуги / ImmutablePersistenceTransform.js
Почему происходит эта ошибка? Комментирует ли преобразование лучший обходной путь? Любая помощь будет приветствоваться !!!
Кроме того, immutablePersistenceTransform
выглядит следующим образом:
import R from 'ramda'
import Immutable from 'seamless-immutable'
// is this object already Immutable?
const isImmutable = R.has('asMutable')
// change this Immutable object into a JS object
const convertToJs = (state) => state.asMutable({deep: true})
// optionally convert this object into a JS object if it is Immutable
const fromImmutable = R.when(isImmutable, convertToJs)
// convert this JS object into an Immutable object
const toImmutable = (raw) => Immutable(raw)
// the transform interface that redux-persist is expecting
export default {
out: (state) => {
// console.log({ retrieving: state })
return toImmutable(state)
},
in: (raw) => {
// console.log({ storing: raw })
return fromImmutable(raw)
}
}
Любая помощь?