当前位置: 首页 > 知识库问答 >
问题:

如何解决:console.error:"redux-持久性创建同步存储失败.返回到"noop"存储

萧允晨
2023-03-14

我正在尝试在react本机应用程序中设置redux持久化。

但是我遇到了这个错误:

安慰错误:“redux persist无法创建同步存储。正在退回到“noop”存储

我试图在"src/redux/index.js"中将存储从存储更改为Asyncstore,但它仍然遇到相同的错误:

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

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

这是其他代码:

应用程序内。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安装--保存@react本机社区/异步存储

2)iOS,记得在iOS文件夹中执行pod安装

3) 将存储更改为异步存储

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,
}

但是,仍然收到以下警告:

共有3个答案

黄飞翮
2023-03-14

我面临着同样的问题,即使我用Asyncstore替换了存储。

我通过删除原始存储的导入行解决了这个问题

import storage from "redux-persist/es/storage"; //remove this
石超
2023-03-14

redux持久化之前v6。0.0您使用的存储方式如下:

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

它在后台使用的是AsyncStorage,它位于react nativecore中。

由于react native已弃用AsyncStorage并将其从react native核心中删除,因此新版本的redux persist已停止使用它,这似乎是一个不错的决定。

您现在可以做同样的事情,但是从社区版本导入Asyncstore。

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

然后在配置中使用in:

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

降级到redux persistv5并不是一个稳定的解决方案,因为它使用核心react native的异步存储,并且react native将在即将发布的版本中完全删除它。

另外,我在评论中读到您不喜欢AsyncStorage,并且我解释了redux persist一直将其用作存储,所以现在唯一的区别是您应该从社区版本而不是从react native核心获得它

夏侯自珍
2023-03-14

在redux persist v6中,您可以尝试进行如下更改:

旧配置V5=

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

新的配置v6=

第一个添加yarn add@react-nate-async-存储/async-存储

import AsyncStorage from '@react-native-async-storage/async-storage';
const persistConfig = {
  //...
  storage: AsyncStorage,
}
 类似资料:
  • 问题内容: 关闭redis服务器后,使用set存储的值被破坏,在这里我找到了使用持久性存储的方法,有人帮助我,如何使用javascript实现它? 我想将来自客户端的一些值存储在redis db中,并且必须在其他客户端中使用该值。 问题答案: 您需要配置Redis服务器以支持持久性机制。此配置存储在文件中,该文件在redis-server命令行上作为参数给出。 这是Redis 2.4的默认文件:h

  • 本平台是通过storageclass来动态创建PV。也就是说咱们依赖于storageclass,如果您的Kubernetes不支持相应的存储试,将无法非常方便的进行挂载。 目前暂不支持挂载多个PVC,或许以后会更新吧。 这里演示的是用的NFS进行演示,实际使用时可根据自己的需求配置相应的provisioner,其他配置是一样的不需要调整,只需要在“模版管理” 调整StorageClass和Pers

  • 本文向大家介绍Flutter持久化存储之数据库存储(sqflite)详解,包括了Flutter持久化存储之数据库存储(sqflite)详解的使用技巧和注意事项,需要的朋友参考一下 前言 数据库存储是我们常用的存储方式之一,对大批量数据有增、删、改、查操作需求时,我们就会想到使用数据库,Flutter中提供了一个sqflite插件供我们用于大量数据执行CRUD操作。本篇我们就来一起学习sqflite

  • 最近我发现了一个像Apache Mesos这样的东西。 在所有演示和示例中,这一切看起来都令人惊讶。我可以很容易地想象一个人将如何竞选无状态的工作--这自然符合整个想法。 3-请告诉我的方法在哲学方面是否是错误的(数据服务器的DFS和Mesos顶部的postgres之类的服务器的某种切换) 问题主要是从Apache Mesos的持久存储中复制的,由程序员堆栈交换上的zerkms提出。

  • 本地持久化卷允许用户通过标准 PVC 接口以简单便携的方式访问本地存储。PV 中包含系统用于将 Pod 安排到正确节点的节点亲和性信息。 一旦配置了本地卷,外部静态配置器(provisioner)可用于帮助简化本地存储管理。请注意,本地存储配置器与大多数配置器不同,并且尚不支持动态配置。相反,它要求管理员预先配置每个节点上的本地卷,并且这些卷应该是: Filesystem volumeMode(默

  • 持久化存储的相关配置 这里使用的是NFS的方式进行持久化,如果您有自己的持久化方案可以不使用改方案。 $ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml $ kubectl apply -f install/kubernetes/storage/rbac.yaml $ kubectl apply -f install/