添加redux-persist后,React应用程序显示空白屏幕

6qftjkof  于 2023-02-04  发布在  React
关注(0)|答案(1)|浏览(226)

我在这个社交媒体MERN网站上工作。我使用redux-persist来存储更新后的状态。下面我给出了来自三个不同文件的三个代码片段。

    • 下面是我的redux-persist代码:**
import { configureStore } from "@reduxjs/toolkit";
import {
  persistStore,
  persistReducer,
  FLUSH,
  PERSIST,
  REGISTER,
  PAUSE,
  PURGE,
  REHYDRATE,
} from "redux-persist";
import storage from "redux-persist/lib/storage";
import authReducer from "./state";

const persistConfig = {
  key: "root",
  storage,
};

export const persistedReducer = persistReducer(persistConfig, authReducer);

export const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) => {
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE],
      },
    })
  },
});

export const persistor = persistStore(store);
    • 现在我使用src/index.js文件中的"store"和"persistor":**
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import {store, persistor} from "./persistor";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <PersistGate persistor={persistor}>
        <App />
      </PersistGate>
    </Provider>
  </React.StrictMode>
);
    • 下面是App.js代码:**
import React from "react";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { useMemo } from "react";
import { useSelector } from "react-redux";
import { createTheme } from "@mui/material/styles";
import { ThemeProvider, CssBaseline } from "@mui/material";

// import Sample from "./Sample";
import HomePage from "./scenes/HomePage/HomePage";
import LoginPage from "./scenes/LoginPage/LoginPage";
import ProfilePage from "./scenes/ProfilePage/ProfilePage";
import { themeSettings } from "./theme";

function App() {
  const mode = useSelector((state) => state.mode);
  const theme = useMemo(() => {
    createTheme(themeSettings(mode));
  }, [mode]);

  return (
    <>
      <BrowserRouter>
        <ThemeProvider theme={theme}>
          <CssBaseline />
          <Routes>
            <Route path="/" element={<HomePage />} />
            <Route path="/login" element={<LoginPage />} />
            <Route path="/profile/:username" element={<ProfilePage />} />
          </Routes>
        </ThemeProvider>
      </BrowserRouter>
    </>
  );
}

export default App;

我试过删除redux-persist和MUI themeProvider,应用运行正常,问题是添加redux-persist后屏幕变成空白(当我检查网站时,白屏和根div是空的),我在网上看到了redux-persist的文档和一些博客,根据我的理解实现了redux-persist,现在我不知道问题是redux-persist还是MUI themeProvider。
请帮助我解决此问题。
下面是我的代码的github repo:https://github.com/ppratham0811/Sociopedia-project
谢谢
我只是想让redux-persistent正常工作,而不是显示空白屏幕。

r7xajy2e

r7xajy2e1#

今天我面临着同样的问题,浪费了我的时间很多,因为浏览器控制台也很清楚,没有错误。
经过研究,我发现,有可能我们犯了以下步骤的错误:
1.redux-persist设置不正确:确保您已经按照正确设置redux-persist的说明进行了操作,并且正确设置了存储配置。
1.PersistGate组件的配置不正确:确保已将 persistor 对象传递给 PersistGate 组件,并将加载属性设置为***null***或其他加载组件。
1.商店的异步设置:如果您使用的是存储的异步设置,则加载存储可能需要一些时间,这可能会导致黑屏。要解决此问题,可以将PersistGate组件 Package 在具有回退UI的Suspense组件中。
1.**数据损坏:**如果你的持久数据损坏,可能会导致应用显示黑屏。你可以尝试清除存储,看看是否可以解决此问题。
1.齿根异径管不正确:确保您已经将persistedReducer(调用persistReducer的结果)而不是根缩减器传递给createStore方法。
所以我发现我犯了第五个错误
但是在您的例子中,您犯了第二个错误,这意味着您必须在index.js [<PersistGate loading={null} persistor={persistor}>]中将loading={null}传递给PersistGate
所以你的index.js应该看起来像这样:

import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import {store, persistor} from "./persistor";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <App />
      </PersistGate>
    </Provider>
  </React.StrictMode>
);

相关问题