import { combineReducers, configureStore } from "@reduxjs/toolkit";
import logger from "redux-logger";
import usersReducer from "@/pages/users/usersSlice";
import postsReducer from "@/pages/posts/postsSlice";
import notificationsReducer from "@/pages/notifications/notificationsSlice";
import {persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER,} from "redux-persist"
import storage from "redux-persist/lib/storage"; // 默认为 localStorage
const isDev = import.meta.env.DEV;
export const rootReducer = combineReducers({
users: usersReducer,
posts: postsReducer,
notifications: notificationsReducer,
});
const persistedReducer = persistReducer({ key: "root", storage }, rootReducer);
const store = configureStore({
reducer: persistedReducer,
devTools: isDev,
middleware: getDefaultMiddleware => isDev ? getDefaultMiddleware({
serializableCheck: {
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
}
}).concat(logger) : getDefaultMiddleware({
serializableCheck: {
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
}
}),
})
export const persistor = persistStore(store);
export default store;
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import store, { persistor } from "@/store";
import { Provider } from "react-redux";
import { RouterProvider } from "react-router-dom";
import router from "@/router";
import { PersistGate } from "redux-persist/integration/react";
async function bootStart() {
createRoot(document.getElementById("root")!).render(
<StrictMode>
<Provider store={store}>
<PersistGate persistor={persistor} loading="加载中...">
<RouterProvider router={router} />
</PersistGate>
</Provider>
</StrictMode>
);
}
void bootStart();
// 黑名单
const persistedReducer = persistReducer({
key: 'root', storage,
blacklist: [usersSlice.name] // 不存储 user
}, rootReducer)
// 白名单
const persistedReducer = persistReducer({
key: 'root', storage,
whitelist: [usersSlice.name] // 只存储 users
}, rootReducer)