Redux-persist не сохраняется с экспо при перезагрузке

Я использую следующий технический стек

  1. реагировать-родной
  2. Экспо
  3. сокращение
  4. redux-persist.

Я пробовал статьи, документы, а также вопросы здесь, но не помог. Его просто не существует. Я использую эмулятор и использую только expo. Как только я закрываю приложение и перезагружаю клиент expo, он просто не сохраняется и просит меня снова войти в систему. Я также пробовал использовать AsyncStorage, но все еще не работал.

Ее мой код:

index.js

import thunk from "redux-thunk";
import AsyncStorage from "@react-native-community/async-storage";
import ExpoFileSystemStorage from "redux-persist-expo-filesystem"
// import storage from 'redux-persist/lib/storage';
import { createStore, applyMiddleware, compose } from "redux";
import { persistStore, persistReducer } from "redux-persist";

import rootReducer from "./reducers/rootReducer";
import logger from "redux-logger";

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

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const persistedReducer = persistReducer(persistConfig, rootReducer);

const store = createStore(
  persistedReducer,
  composeEnhancers(applyMiddleware(thunk, logger))
);

let persistor = persistStore(store);

export { store, persistor };

app.js

import React from "react";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { AppLoading } from "expo";
import { useFonts } from "@use-expo/font";
import { NavigationContainer } from "@react-navigation/native";
import { ThemeProvider } from "react-native-elements";

import { theme } from "./constants/ThemeConfiguration";
import { store, persistor } from "./store";
import RootNavigator from "./navigators/RootNavigator";


export default (App) => {
  let [fontsLoaded] = useFonts({
    "Lato-Regular": require("./assets/fonts/Lato-Regular.ttf"),
  });

  if (!fontsLoaded) {
    return <AppLoading />;
  } else {
    return (
      <Provider store={store}>
        <PersistGate loading={null} persistor={persistor}>
          <ThemeProvider theme={theme}>
            <NavigationContainer>
              <RootNavigator />
            </NavigationContainer>
          </ThemeProvider>
        </PersistGate>
      </Provider>
    );
  }
};

rootReducer.js

import thunk from "redux-thunk";
import AsyncStorage from "@react-native-community/async-storage";
import { createStore, applyMiddleware, compose } from "redux";
import { persistStore, persistReducer } from "redux-persist";

import rootReducer from "./reducers/rootReducer";
import logger from "redux-logger";

const persistConfig = {
  key: "auth",
  storage: AsyncStorage,
};

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const persistedReducer = persistReducer(persistConfig, rootReducer);

const store = createStore(
  persistedReducer,
  composeEnhancers(applyMiddleware(thunk, logger))
);

let persistor = persistStore(store);

export { store, persistor };

person targhs    schedule 09.07.2020    source источник
comment
Можете ли вы вставить файл rootReducer?   -  person newdeveloper    schedule 10.07.2020
comment
Добавлен. Также починил сам.   -  person targhs    schedule 10.07.2020
comment
Не могли бы вы вставить ./reducers/rootReducer (файл rootReducer.js над ссылками). Спасибо.   -  person ryantk    schedule 18.11.2020


Ответы (1)


Я исправил это. Его нет ни в какой документации или статье. Проблема связана с файлом persistConfig. Ключ, который является здесь корневым. Это должно быть имя редуктора, который мы хотим сохранить. В моем случае это был авторизация.

Обновленный persistConfig будет иметь следующий вид:

const persistConfig = {
  key: "auth",
  storage: AsyncStorage,
};
person targhs    schedule 10.07.2020
comment
Вы случайно не знаете, какой ключ поставить, если я хочу сохранить весь комбинированныйReducer? - person ryantk; 18.11.2020
comment
Я не пробовал, но, думаю, установил ключ для этого комбинированногоReducer и использую его в persistConfig. - person targhs; 18.11.2020