Reactjs 如何在redux persist中配置localStorage和sessionStorage?

Reactjs 如何在redux persist中配置localStorage和sessionStorage?,reactjs,redux,react-redux,session-storage,redux-persist,Reactjs,Redux,React Redux,Session Storage,Redux Persist,我想在sessionStorage中存储与用户相关的属性,并在localStorage中存储其他属性。 我能够使用以下配置中的persist将所有属性存储在localStorage中 import reducers from './reducer'; import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import autoMe

我想在sessionStorage中存储与用户相关的属性,并在localStorage中存储其他属性。 我能够使用以下配置中的persist将所有属性存储在localStorage中

import reducers from './reducer';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';

const persistConfig = {
key: 'root',
storage: storage,
stateReconciler: autoMergeLevel2 // see "Merge Process" section for details.
};

const pReducer = persistReducer(persistConfig, reducers);

有人能告诉我如何在persist中配置sessionStorage和localStorage吗?

有时您只想在当前浏览器会话中缓存/持久化数据。关闭浏览器时,您希望缓存再次变为空;但是,当您刷新浏览器选项卡时,您希望保持缓存完好无损。例如,当用户登录到应用程序后处理用户会话时,此行为非常有用。用户会话可以保存,直到浏览器关闭。在这里,您可以使用本机会话存储而不是本地存储。会话存储的使用方式与本地存储相同

//将数据保存到会话存储
setItem('key','value');
//从会话存储中获取保存的数据
让data=sessionStorage.getItem('key');
//从会话存储中删除保存的数据
sessionStorage.removietem('key');
//从会话存储中删除所有保存的数据

sessionStorage.clear()来自官方redux持久回购的示例:

import { combineReducers } from 'redux'
import { persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'

import { authReducer, otherReducer } from './reducers'

const rootPersistConfig = {
  key: 'root',
  storage: storage,
  blacklist: ['auth']
}

const authPersistConfig = {
  key: 'auth',
  storage: storage,
  blacklist: ['somethingTemporary']
}

const rootReducer = combineReducers({
  auth: persistReducer(authPersistConfig, authReducer),
  other: otherReducer,
})

export default persistReducer(rootPersistConfig, rootReducer)


也许这不是你想要的,因为这个解决方案基于嵌套减缩器,但对我来说很有效。

除了Ivan的答案,你还可以使用现成的
会话
驱动程序

从“/reducer”导入减速机;
从“redux persist”导入{persistStore,persistReducer};
从“redux persist/lib/storage”导入存储;
从“redux persist/lib/storage/session”导入会话存储
从“redux persist/lib/stateconciler/autoMergeLevel2”导入autoMergeLevel2;
常量rootPersistConfig={
键:'根',
存储:存储,
黑名单:['auth'],
状态协调器:autoMergeLevel2
};
常量authPersistConfig={
键:“auth”,
存储:会话存储,
}
const rootReducer=combinereducer({
auth:persistReducer(authPersistConfig,authReducer),
其他:其他减速机,,
})
导出默认persistReducer(rootPersistConfig,rootReducer)

否,我不想使用sessionStorage手动执行此操作。我想对这个部分使用redux persist。@Arthur,sessionStorage类似于localStorage;不同之处在于,虽然localStorage中的数据不会过期,但当页面会话结束时,sessionStorage中的数据将被清除。这对你有意义吗?@Alex,我知道这一点,但它不能解决这个问题:)@Arthur,那么你为什么要保存会话存储?不是logical@Alex虽然我不能代表其他人说话,但我的用例是,有些东西我只想在会话中保留(因此使用sessionStorage),有些东西我想在会话之外保留(因此使用localStorage)。我想从同一个redux商店提供这两个应用程序,以便应用程序可以以相同的方式访问它们。