除了我不想在 redux-persist 中清除的内容之外,如何清除所有内容?
Posted
技术标签:
【中文标题】除了我不想在 redux-persist 中清除的内容之外,如何清除所有内容?【英文标题】:How to purge all except what I don't want to purge in redux-persist? 【发布时间】:2019-07-21 13:39:38 【问题描述】:我正在寻找如何使用 redux-persist 进行部分清除。 我不知道它是否有相关的方法。 这是我的代码,我知道这种方式将删除所有状态。 如果您对此有任何想法,请回复,我将不胜感激。 谢谢你:)
const configure = () =>
const devTools = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__();
let store = createStoreWithFirebase(reducer, devTools, applyMiddleware(ReduxThunk));
let persistor = persistStore(store);
persistor.purge();
return store, persistor;
【问题讨论】:
您找到解决方案了吗?我想在每次应用加载时重置我的部分 redux 状态,但不是全部... 【参考方案1】:如果你想重置你的 reducer 的状态,你可以创建一个动作,将每个 reducer 重置到他的初始状态,除了你想要持久的那些。
export default function reducer(state = initialState, action)
switch (action.type)
case RESET_REDUCER_GROUP:
return ...initialState ;
default:
return state;
你可以把它放在你想重置的每一个减速器中,这样你就不需要清除了。
您还可以通过将减速器的状态设置为未定义来重置减速器:
const rootReducer = (state, action) =>
console.log("STATE", state)
if (action.type === 'RESET')
state = undefined
return appReducer(state, action)
【讨论】:
感谢您的回复。我正在寻找有关清除特定减速器状态的信息。可能吗?如果可能的话,我该如何处理? 我认为目前无法传递任何参数来清除,似乎有人正在向 pesist 库提出功能请求以完全按照您的意愿进行操作,您可以查看此线程 github.com/rt2zz/redux-persist/issues/935 ,同时我建议你的替代方法有效,你也可以看看这个问题,看看如何管理减速器状态并重置它们***.com/questions/35622588/…希望这对你有帮助【参考方案2】:可能不相关,但以防万一有人和我有类似情况:
我想在每次应用初始化时重置我的部分 redux 商店。
例如,我将 settingsModal 组件(布尔值)的状态存储在我的 redux 存储中打开或关闭,并将其持久化到设备中。
如果应用在状态设置为 true 的情况下关闭,那么当他们下次打开应用时,它会以我试图阻止的打开状态重新水化。
我最终做的只是将这些状态添加到持久配置中的blacklist
,如下面的文档所示:https://github.com/rt2zz/redux-persist#blacklist--whitelist
import createStore from 'redux';
import persistStore, persistReducer from 'redux-persist';
import AsyncStorage from '@react-native-community/async-storage';
import reducer from './reducer';
const persistConfig =
key: 'root',
storage: AsyncStorage,
blacklist: ['settingsOpen'], // <-- can add other pieces of state here
;
const persistedReducer = persistReducer(persistConfig, reducer);
export const store = createStore(persistedReducer);
export const persistor = persistStore(store);
我对商店的初始状态
const initialState =
settingsOpen: false,
// ...rest of my init state here
;
所以现在我的设置模式将永远不会在应用启动时处于打开状态!
【讨论】:
【参考方案3】:我的存储引擎是localForage(不是localStorage),我使用localForage.setItem('persist:root', ) 来重置indexedDB,而不是使用persistor.purge()
【讨论】:
以上是关于除了我不想在 redux-persist 中清除的内容之外,如何清除所有内容?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 设备上使用 Redux-Persist 和 React Native 时崩溃
我已经在 next js 中使用 next-redux-wrapper 成功实现了 redux-persist