Как решить: console.error: redux-persist не удалось создать хранилище синхронизации. откат к хранилищу "нет"

Я пытаюсь настроить redux-persist в собственном приложении для реагирования.

Однако я сталкиваюсь с этой ошибкой:

console.error: "redux-persist не удалось создать хранилище синхронизации. Возвращение к хранилищу" noop "

Я попытался изменить хранилище с хранилища на AsyncStorage в «src / redux / index.js», но все равно возникает та же ошибка:

import AsyncStorage from '@react-native-community/async-storage';

const config = {
  key: "root",
  storage: AsyncStorage // Attempted to fix it (but failed)
  // storage // old code
};

Вот другие коды:

В App.js:

import React, { Component } from "react";
import { Provider } from "react-redux";
import { persistStore } from "redux-persist";
import { PersistGate } from "redux-persist/es/integration/react";
import store from "@store/configureStore";
import Router from "./src/Router";

export default class ReduxWrapper extends Component {
  render() {
    const persistor = persistStore(store);
    return (
      <Provider store={store}>
        <PersistGate persistor={persistor}>
          <Router />
        </PersistGate>
      </Provider>
    );
  }
}

В configureStore.js:

import { applyMiddleware, compose, createStore } from "redux";
import thunk from "redux-thunk";
import reducers from "@redux";

const middleware = [
  thunk,
  // more middleware
];

const configureStore = () => {
  let store = null;
  store = compose(applyMiddleware(...middleware))(createStore)(reducers);
  return store;
};

export default configureStore();

В /src/redux/index.js

import { persistCombineReducers } from "redux-persist";
import storage from "redux-persist/es/storage";

import { reducer as NetInfoReducer } from "./NetInfoRedux";
import { reducer as UserRedux } from "./UserRedux";

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

export default persistCombineReducers(config, {
  netInfo: NetInfoReducer,
  user: UserRedux,
}

В Router.js

import React from "react";
import NetInfo from "@react-native-community/netinfo/lib/commonjs";
import { Config, AppConfig, Device, Styles, Theme, withTheme } from "@common";
import { AppIntro } from "@components";
import { connect } from "react-redux";

class Router extends React.PureComponent {
  constructor(props){
    super(props)
    this.state = {
      loading: true,
    };
  }

  componentWillMount() {
    NetInfo.getConnectionInfo().then((connectionInfo) => {
      this.props.updateConnectionStatus(connectionInfo.type != "none");
      this.setState({ loading: false });
    });
  }

  render() {
    return <AppIntro />;
  }
}

export default withTheme(
    connect(
    //   mapStateToProps,
    //   mapDispatchToProps
    )(Router)
);

Обновлять:

Удалось устранить базу ошибок по предложению mychar: github.com/rt2zz/redux-persist/issues/1080:

1) npm install --save @ response-native-community / async-storage

2) на iOS не забудьте выполнить «pod install» в папке iOS.

3) Измените хранилище на AsyncStorage

old code => import storage from 'redux-persist/lib/storage';
new code => import AsyncStorage from '@react-native-community/async-storage';

old code =>
const persistConfig = {
//...
storage,
}

new code =>
const persistConfig = {
//...
storage: AsyncStorage,
}

Однако по-прежнему появляется это предупреждение:

введите описание изображения здесь


person user1872384    schedule 04.09.2019    source источник
comment
какая у вас версия для реакции? Вы связали @ response-native-community / async-storage?   -  person maddy    schedule 04.09.2019
comment
0.60.5 ... Нет мне не понравилось async-хранилище   -  person user1872384    schedule 04.09.2019
comment
проверьте это github.com/rt2zz/redux-persist/issues/1080   -  person mychar    schedule 04.09.2019
comment
@mychar, большое спасибо. Вышеупомянутая ошибка исчезла, но я все еще получаю предупреждение. Вы знаете, как избавиться от этого предупреждения? Предупреждение: Асинхронное хранилище было извлечено из ядра, поддерживающего реакцию, и будет удалено в следующем выпуске. Теперь его можно установить и импортировать из «@ response-native-community / async-storage» вместо «react-native». См. github.com/react-native-community/react-native-async -хранилище   -  person user1872384    schedule 04.09.2019
comment
@ user1872384, как убрать ошибку консоли. Тем не менее, я получаю консольную ошибку   -  person mychar    schedule 04.09.2019
comment
@mychar какая ошибка консоли? Вы имеете в виду эту console.error: redux-persist не удалось создать хранилище синхронизации. откат к хранилищу Noop? Я следил за решением по ссылке, которую вы мне предоставили, lol ... Я обновил шаги, которые я выполнил в вопросе выше. Не забудьте запустить установку модуля в папке iOS.   -  person user1872384    schedule 05.09.2019
comment
@ user1872384, я все еще получаю консольную ошибку. Я сделал все шаги. но все еще имеет ту же проблему. также сделал установку стручка. не знаю почему   -  person mychar    schedule 05.09.2019
comment
Измените файл PodSpec внутри nodemodule / @ response-native-community / async-storage Rect на Rect-Core и установите pod   -  person maddy    schedule 05.09.2019
comment
@mychar Я хотел бы оказать вам услугу, помогая решить проблему. Сможете ли вы создать новый проект с минимальным количеством кода, чтобы заставить работать redux-persist?   -  person user1872384    schedule 05.09.2019
comment
@ user1872384 спасибо за помощь, ошибка решена.   -  person mychar    schedule 07.10.2019


Ответы (9)


В redux-persist v6 вы пытаетесь изменить следующим образом:

Старый конфиг V5 = ›

import storage from 'redux-persist/lib/storage';
const persistConfig = {
   //...
   storage,
}

Новый конфиг v6 = ›

Первое добавление: yarn add @react-native-async-storage/async-storage

import AsyncStorage from '@react-native-async-storage/async-storage';
const persistConfig = {
  //...
  storage: AsyncStorage,
}
person rfdc    schedule 10.09.2019
comment
и не забудьте сделать это после добавления пакета async-storage: cd ios / && pod install - person merry_ejik; 11.09.2019
comment
спасибо ... все еще не решает эту проблему: Предупреждение: Асинхронное хранилище было извлечено из ядра, поддерживающего реакцию, и будет удалено в следующем выпуске. Теперь его можно установить и импортировать из «@ response-native-community / async-storage» вместо «react-native». - person user1872384; 29.10.2019
comment
@ user1872384 проверьте мой подробный ответ, почему вы получаете эту ошибку - person Edison Biba; 19.12.2019
comment
@merry_ejik что делать, если в выставочном проекте нет каталога ios? - person zengod; 14.01.2020
comment
Предполагая, что ваше приложение управляется Expo (создается с помощью expo-cli), вместо использования AsyncStorage из Facebook RN. Использование документации: import {AsyncStorage} из 'react-native'; - person Utkarsh; 26.04.2020
comment
Не забудьте удалить строку import storage from "redux-persist/es/storage". - person Md. Robi Ullah; 01.07.2020
comment
Стоит отметить, что @react-native-community/async-storage устарел и перемещен в новую организацию с именем @react-native-async-storage/async-storage, поэтому вы также можете заменить оператор импорта в config v6 = ›на: import AsyncStorage from '@react-native-async-storage/async-storage'; - person Ali Abdelfattah; 18.12.2020

До redux-persist v6.0.0 хранилище использовалось следующим образом:

import storage from 'redux-persist/lib/storage';

В фоновом режиме используется AsyncStorage, что было в react-native ядре.

Поскольку react-native устарел AsyncStorage и удалит его из react-native ядра, новая версия redux-persist перестала его использовать, и это кажется хорошим решением.

Вы можете сделать то же самое сейчас, но вместо этого импортируйте AsyncStorage из версии сообщества.

import AsyncStorage from '@react-native-community/async-storage';

А затем используйте в своей конфигурации:

const persistConfig = {
  storage: AsyncStorage,
  //other configurations
};

Переход на redux-persist v5 не является стабильным решением, поскольку он использует AsyncStorage из ядра react-native, и react-native полностью удалит его в следующих версиях.

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

person Edison Biba    schedule 11.09.2019
comment
redux-persist v6 + response-native-community / async-storage = ›после изменения этого еще не работает :( - person Mahefa; 30.01.2020
comment
@Mahefa, какая у тебя проблема? - person Edison Biba; 30.01.2020

Я столкнулся с той же проблемой, хотя заменил хранилище на AsyncStorage.

Я решил проблему, удалив строку импорта исходного хранилища

import storage from "redux-persist/es/storage"; //remove this
person Avindu Hewa    schedule 27.10.2019

Для рабочего процесса Expo SDK версии> = 33 плагин @react-native-community/async-storage не работает.

У меня это сработало.

import { AsyncStorage } from 'react-native';`  
.  
.   
.  
const persistConfig = {
  key: 'root',
  storage: AsyncStorage
}

ссылка: https://docs.expo.io/versions/latest/react-native/asyncstorage/

person Henry Palacios    schedule 03.11.2019
comment
Какую версию Expo вы используете @zengod? Не могли бы вы подробно рассказать об ошибке? - person Henry Palacios; 15.01.2020
comment
Это сработало для меня - person Nirav Sanghvi; 29.04.2021

Решаю, удалив:

import storage from 'redux-persist/lib/storage'

и заменив его на:

import { AsyncStorage } from 'react-native'

Не забывайте об этом:

const rootPersistConfig = {  
    key: 'root',
    storage: AsyncStorage
}
person OUMAIMA ZAMZARI    schedule 16.04.2020

Прежде всего, импортируйте AsyncStorage, используя строку ниже

import AsyncStorage from '@react-native-community/async-storage';

Во-вторых, persistConfig должен быть назначен AsyncStorage, как показано ниже, и если вы предоставили объект хранилища, закомментируйте его.

const persistConfig = {
    // storage,
    storage: AsyncStorage,  
}

Наконец, строка ниже импортирует хранилище или любое другое хранилище не должно существовать в вашем файле.

// import storage from 'redux-persist/lib/storage'  COMMENT THIS OUT

Вот как я решил свою проблему.

person Arsalan Ahmad Ishaq    schedule 25.01.2021

Моя ошибка была решена понижением версии redux-persis до «5.10.0».

person Sardar Usama    schedule 05.09.2019
comment
Да, вы также можете понизить его до версии ниже 6.0.0 - person user1872384; 05.09.2019
comment
Да, но это не рекомендуется. Проверьте мой ответ ниже, почему это происходит :) - person Edison Biba; 18.10.2019

Закомментируйте / исключите эту строку из импорта import storage from 'redux-persist/lib/storage'

убедитесь, что импортируется только асинхронное хранилище

import AsyncStorage from '@react-native-community/async-storage';

person Lee M. Lwando    schedule 02.09.2020

Понизить redux-persist до 5.10.0

person Chinedu Ofor    schedule 18.10.2019
comment
Ошибка не отображается в версии "redux-persist": "^5.10.0" - person Chinedu Ofor; 27.10.2019