仅保留 Reducer 中的某些字段
Persisting only some fields from the Reducer
嗨,在我们的应用程序中,我们有一个缩减器模式:
{
data: //here we have our actual data
fetching: // is it still fetching
intact: // has it been 'touched'
error: //errors if need be
}
此外,由于业务需求,我需要保留一个 ReduxForm,它本身就是一堆蠕虫……
form: {
Foobar: {
values: {
},
initial: {
},
syncErrors: {
},
registeredFields: {
}
}
}
}
正如您可能已经发现的那样,除了数据之外,持久化任何东西都是没有意义的,但是 Redux-Persist 持久化了整个减速器。关于过滤和转换的例子有点……我觉得乏善可陈,我一直在努力实施。寻找示例
在 redux-persist 中可以 whitelist/blacklist keys:
import { createStore } from 'redux'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'
const persistConfig = {
key: 'form',
storage: storage,
whitelist: ['Foobar'] // only Foobar will be persisted
};
const persistedReducer = persistReducer(persistConfig, rootReducer)
export default () => {
let store = createStore(persistedReducer)
let persistor = persistStore(store)
return { store, persistor }
}
不幸的是 whitelist/blacklist 只接受 1 级深度所以我认为你需要使用这样的东西:https://github.com/edy/redux-persist-transform-filter 或以某种方式修改你的数据结构您可以绕过库的 1 级深度限制。
希望对您有所帮助!
好的,所以这可以使用 redux-persist-transform-filter 像@NickHTTPS sugested:
import createFilter from 'redux-persist-transform-filter';
const saveSubsetFilter = createFilter('form', ['Foo.bar']);
const persistConfig = {
key: 'form',
storage,
whitelist: ['form'],
transforms: [saveSubsetFilter]
};
persistCombineReducers(persistConfig, { form: formReducer });
很有魅力:)
嗨,在我们的应用程序中,我们有一个缩减器模式:
{
data: //here we have our actual data
fetching: // is it still fetching
intact: // has it been 'touched'
error: //errors if need be
}
此外,由于业务需求,我需要保留一个 ReduxForm,它本身就是一堆蠕虫……
form: {
Foobar: {
values: {
},
initial: {
},
syncErrors: {
},
registeredFields: {
}
}
}
}
正如您可能已经发现的那样,除了数据之外,持久化任何东西都是没有意义的,但是 Redux-Persist 持久化了整个减速器。关于过滤和转换的例子有点……我觉得乏善可陈,我一直在努力实施。寻找示例
在 redux-persist 中可以 whitelist/blacklist keys:
import { createStore } from 'redux'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'
const persistConfig = {
key: 'form',
storage: storage,
whitelist: ['Foobar'] // only Foobar will be persisted
};
const persistedReducer = persistReducer(persistConfig, rootReducer)
export default () => {
let store = createStore(persistedReducer)
let persistor = persistStore(store)
return { store, persistor }
}
不幸的是 whitelist/blacklist 只接受 1 级深度所以我认为你需要使用这样的东西:https://github.com/edy/redux-persist-transform-filter 或以某种方式修改你的数据结构您可以绕过库的 1 级深度限制。
希望对您有所帮助!
好的,所以这可以使用 redux-persist-transform-filter 像@NickHTTPS sugested:
import createFilter from 'redux-persist-transform-filter';
const saveSubsetFilter = createFilter('form', ['Foo.bar']);
const persistConfig = {
key: 'form',
storage,
whitelist: ['form'],
transforms: [saveSubsetFilter]
};
persistCombineReducers(persistConfig, { form: formReducer });
很有魅力:)