Я использую собственный реактивный Ignite Andross Boilerplate, и я пытаюсь сохранить состояние навигации, чтобы, когда пользователь закроет / откроет приложение, он вернется к предыдущему экрану.
Например: пользователь заполняет форму регистрации, затем закрывает приложение и возвращается позже, чтобы закончить, где бы он ни остановился.
Поскольку redux persist предоставляется из коробки с Ignite, я подумал, что могу просто добавить навигационный редуктор в постоянный белый список и позволить redux продолжать свою работу, сохраняя мое состояние навигации в локальном хранилище.
Итак, я сделал это:
// 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)
}
}
Любая помощь ?