import { configureStore, combineReducers } from '@reduxjs/toolkit'
import authSlice from './auth/auth-slice';
import generalSlice from './general/general-slice';
import userSlice from './user/user-slice';
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from "@react-native-async-storage/async-storage";
import thunk from 'redux-thunk';
// Define persistConfig
const persistConfig = {
key: 'root', // key for the root state
storage: AsyncStorage, // use AsyncStorage as the storage engine
};
const persistedGeneralReducer = persistReducer(persistConfig, generalSlice.reducer);
const persistedUserReducer = persistReducer(persistConfig, userSlice.reducer);
const persistedAuthReducer = persistReducer(persistConfig, authSlice.reducer);
const combinedReducer = combineReducers({
auth: persistedAuthReducer,
general: persistedGeneralReducer,
user: persistedUserReducer,
})
const rootReducer = (state, action) => {
if (action.type === 'CLEAR_STATE') { // check for action type
state = undefined;
}
return combinedReducer(state, action);
};
const store = configureStore({
reducer: {
auth: persistedAuthReducer,
general: persistedGeneralReducer,
user: persistedUserReducer,
},
middleware: [thunk]
});
const persistor = persistStore(store);
export const clearState = () => ({
type: 'CLEAR_STATE'
});
export { store, persistor };
有了上面的配置,一切正常,所以当我直接把persistedReducers放到configureStore中时,我的应用程序没有问题。但问题是,当用户注销时,我想清除redux状态,我想出了使用rootReducer和combinedReducer的解决方案,然后设置state = undefined来清除状态,但是当我把rootReducer作为reducer:
的值时,redux-persist停止工作,当我重新加载应用程序时,所有的redux状态都消失了。
我试过使用combinePersistedReducer,但效果不好。
1条答案
按热度按时间cczfrluj1#
我通常通过将所有reducer设置为初始状态来解决这个问题。