【发布时间】: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