除了我不想在 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 中清除的内容之外,如何清除所有内容?的主要内容,如果未能解决你的问题,请参考以下文章

让 redux-persist 在数据恢复时通知我

在 iOS 设备上使用 Redux-Persist 和 React Native 时崩溃

我已经在 next js 中使用 next-redux-wrapper 成功实现了 redux-persist

Redux-persist 没有更新状态

在应用程序启动时重置减速器状态,同时使用 redux-persist 保持状态

为啥 Redux-Persist 不持久化存储