почему при повторной загрузке мои сохраняемые данные теряют данные?

#reactjs #redux #react-redux #redux-persist

Вопрос:

Я использую redux, сохраняемый в моем веб-приложении, для хранения данных в локальном хранилище, но redux теряет данные при перезагрузке страницы. у кого-нибудь есть такая же проблема или кто-нибудь может мне в этом помочь.

моя инициализация redux-persist-это:

 import { createStore } from "redux";
import userData from "./reducers/reducers";
import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";

const persistConfig = {
  key: "root",
  storage,
  whitelist: ["userData"],
};

const persistedReducer = persistReducer(persistConfig, userData);

const store = createStore(persistedReducer);

export const persistor = persistStore(store);

export default store;

 

в то время как мой index.js:

 import React from "react";
import ReactDOM from "react-dom";
import "./index.scss";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/lib/integration/react";
import { persistor } from "./redux/store";
import store from "./redux/store";

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

reportWebVitals();

 

Я не могу найти ни одной ошибки или плохой практики, может ли кто-нибудь мне помочь.

Ответ №1:

Redux-persist справится со всем этим. переделать-сохраниться

Пример :

configureStore.js

     import { createStore } from 'redux'
    import { persistStore, persistReducer } from 'redux-persist'
    import storage from 'redux-persist/lib/storage' // defaults to localStorage for web and AsyncStorage for react-native
    import rootReducer from './reducers'
    
    const persistConfig = {
      key: 'root',
      storage,
    }
    
    const persistedReducer = persistReducer(persistConfig, rootReducer)
    
    export default () => {
      let store = createStore(persistedReducer)
      let persistor = persistStore(store)
      return { store, persistor }
    }
 

App.js

 import { PersistGate } from 'redux-persist/integration/react'

const App = () => {
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <RootComponent />
      </PersistGate>
    </Provider>
  );
};
 

Комментарии:

1. спасибо за ваш ответ. все еще не получалось

2. Изменить const persistedReducer = persistReducer(persistConfig, userData); на const persistedReducer = persistReducer(persistConfig, { userData });

3. Вы объединили свои редукторы?

4. это дает ошибку « Ошибка типа: baseReducer не является функцией «

5. нет, я не комбинировал, у меня только один редуктор

Ответ №2:

Я не вижу ничего плохого с кодом, с той лишь разницей, что вас нет rootReducer , и вам не нужно ставить whitelist , так как когда я раньше whitelist это не фильтр и другие, по крайней мере, это не работает для меня, что не о том, что редуктор должен/не должен был, используя хранения blackList и передачи редукторов, что не работает.

Попробуйте попробовать создать рутрЕдуктор.

Комментарии:

1. сэр userData — мой рутрЕдуктор