Почему Ignite redux persist генерирует неизменную ошибку при добавлении навигационного редуктора в белый список? - PullRequest
0 голосов
/ 05 июня 2019

Я использую реагирующий нативный 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


Дело в том ... Я получил эту ошибку в результате:

enter image description here

И как-то я понял, что виноват был 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)
  }
}



Любая помощь?

...