Parse在React Native中找不到localStorage变量

问题描述 投票:6回答:5

我有一个React Native应用,可以在Chrome调试器打开的情况下正常运行。但是,一旦禁用它,无论何时尝试进行任何Parse调用,我都会不断收到以下错误:

React Native and Parse error

调用栈返回到以下代码,试图登录用户:

Parse.User.logIn(
  email,
  password,
  {
    success: function(res) {
      console.log('success');
    },
    error: function(error) {
      console.log(error.code + ' ' + error.message);
    }
  }
);

我已尝试删除控制台语句,以防错误与控制台不可用有关,但无济于事。其他Parse调用会发生这种情况,并且总是与缺少的localStorage变量有关。

提前感谢您的帮助!

更新:

好像Firebase存在类似问题。 https://groups.google.com/forum/#!topic/firebase-talk/Y_usPRhOIYA

他们提到这个问题与本地存储没有polyfill有关。

javascript parse-platform reactjs react-native
5个回答
11
投票

以上答案在技术上是正确的,但是Parse提供了不需要polyfil或降级的解决方案。这是由于我永久缺乏阅读能力。我在Parse React docs上找到了它:

从1.6版开始,Parse JS SDK的React版本有所不同本机。如果您在React Native上使用Parse + React,则需要需要使用'parse-react / react-native'软件包。

例如:

// For React Native apps
var React = require('react-native');
var Parse = require('parse/react-native');
var ParseReact = require('parse-react/react-native');

抱歉,我还使用了Parse React。我以为问题只在于Parse,因为我还没有开始通过Parse React添加数据订阅。


2
投票

是正确的(使用polyfill)。没有添加作为polyfill的localStorage,也没有Apple的嵌入式javascriptCore引擎实现了localStorage(当然,Chrome的v8实现了该功能)。主要原因是localStorage是同步的,而React应该设计上只能与异步操作一起使用。

[有一个很好的解决方案/小型polyfill,它用内存版本https://gist.github.com/juliocesar/926500代替了本地存储。那应该让解析将本地存储用于缓存(我相信这是他们现在使用它的主要目的)。数据将不会在应用程序执行之间持久存储。我不确定是否可以通过Parse禁用localstorage的使用,但这是探索的另一种可能性。


2
投票

我降级为1.5.0,现在可以工作。

"dependencies": {
  "parse": "1.5.0",

1
投票

我认为即使被迫使用Parse + React也不是一个很好的解决方案。例如,我正在使用Redux构建我的应用程序,这对我来说将所有API请求保留在动作创建者内部更为有意义。

在1.6.0中,当React Native不支持本地存储时,Parse迫使我们使用本地存储。但是,React Native不支持AsyncStorage

对我来说,我刚刚降级为1.5,希望他们将来会提供使用本地存储或异步存储的选项。

所以偶然发现此问题且不希望被迫使用Parse + React的人们将答案降级为1.5,在package.json中将您的依赖项更改为"parse": "1.5.0"


0
投票

可以通过以下方式轻松解决此问题:

© www.soinside.com 2019 - 2024. All rights reserved.