【问题标题】:Why is Ignite redux persist throwing immutable error when adding navigation reducer to whitelist?为什么将导航减速器添加到白名单时,Ignite redux 会持续抛出不可变错误?
【发布时间】:2019-06-05 18:55:55
【问题描述】:

我正在使用 react native 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)
  }
}



有什么帮助吗?

【问题讨论】:

    标签: react-native redux react-redux react-navigation redux-persist


    【解决方案1】:

    伙计,我认为“导航”不是不可变的数据结构。这就是为什么抛出这个错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2019-08-20
      • 2021-12-08
      • 2016-04-23
      • 2018-02-22
      相关资源
      最近更新 更多