combineReducer不能与redux-persistent结合使用

5w9g7ksd  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(100)
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,但效果不好。

cczfrluj

cczfrluj1#

我通常通过将所有reducer设置为初始状态来解决这个问题。

const initialState = {
 user: '',
 mail: ''
}

const myReducers = (state = initialState,action) => {
    switch (action.type) {
        case "EMAIL": 
            return {
                ...state,
                mail: action.payload.mail
            }
        case "USER":
            return {
                ...state,
                user: action.payload.user
            }

        case "CLEAR_STATE":
            return initialState
        default: 
            return state  
    }
}

相关问题