Estoy tratando de configurar redux-persist en una aplicación nativa de reacción.
Sin embargo, estoy golpeando este error:
console.error: "redux-persist no pudo crear el almacenamiento de sincronización. recurriendo al almacenamiento "noop"
Intenté cambiar el almacenamiento de almacenamiento a AsyncStorage en "src/redux/index.js", pero sigue apareciendo el mismo error:
import AsyncStorage from '@react-native-community/async-storage'; const config = { key: "root", storage: AsyncStorage // Attempted to fix it (but failed) // storage // old code };Aquí están los otros códigos:
En aplicación.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> ); } }En 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();En /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, }En 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) );Actualizar:
Logró resolver la base de errores en la sugerencia de mychar: github.com/rt2zz/redux-persist/issues/1080:
1) instalación de npm --guardar @react-native-community/async-storage
2) en iOS, recuerde realizar la "instalación de pod" en la carpeta de iOS
3) Cambiar el almacenamiento a 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, }Sin embargo, sigue recibiendo esta advertencia:
En redux-persist v6, intenta cambiar de la siguiente manera:
Configuración antigua V5 =>
import storage from 'redux-persist/lib/storage'; const persistConfig = { //... storage, }Nueva configuración v6 =>
Primero agregue: yarn add @react-native-async-storage/async-storage
import AsyncStorage from '@react-native-async-storage/async-storage'; const persistConfig = { //... storage: AsyncStorage, }Antes redux-persist persist v6.0.0, estaba usando un almacenamiento como este:
import storage from 'redux-persist/lib/storage'; Lo que esto usa en segundo plano es AsyncStorage que estaba en el núcleo react-native .
Dado que react-native ha desaprobado AsyncStorage y lo eliminará del núcleo de react-native , la nueva versión de redux-persist ha dejado de usarlo y parece una buena decisión.
Puede hacer lo mismo ahora, pero en su lugar importe AsyncStorage desde la versión comunitaria .
import AsyncStorage from '@react-native-community/async-storage';Y luego use in en su configuración:
const persistConfig = { storage: AsyncStorage, //other configurations }; Bajar de categoría a redux-persist v5 no es una solución estable, ya que usa AsyncStorage del núcleo de react-native y react-native lo eliminará por completo en las próximas versiones.
También leí en los comentarios que no te gusta AsyncStorage , bueno, como expliqué, redux-persist ha estado usando como almacenamiento, por lo que la única diferencia ahora es que debes obtenerlo de la versión comunitaria y no de react-native core.
Enfrenté el mismo problema, aunque reemplacé el almacenamiento con AsyncStorage.
Resolví el problema eliminando la línea de importación del almacenamiento original
import storage from "redux-persist/es/storage"; //remove this