Parse在React Native中找不到localStorage变量

时间:2015-09-12 22:30:52

标签: javascript parse-platform reactjs react-native

我有一个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

他们提到问题与没有localStorage的polyfill有关。

5 个答案:

答案 0 :(得分:11)

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

  

从1.6版本开始,Parse JS SDK为React提供了不同的版本   本土。如果你在React Native上使用Parse + React,你需要   需要解析 - 反应/反应原生的'包而不是。

例如:

// 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添加数据订阅。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

我降级到1.5.0并立即工作。

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

答案 3 :(得分:1)

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

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

对我来说,我只是降级到1.5,希望他们将来可以选择使用本地存储或异步存储。

那些偶然发现并且不想被迫使用Parse + React你的答案的人是在你的package.json将你的依赖关系更改为"parse": "1.5.0"时降级到1.5。

答案 4 :(得分:0)

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

npm install localstorage-polyfill

然后在App.js中

import 'localstorage-polyfill'; 

编辑:此错误可能意味着您已过时或不兼容的库依赖关系。您可以尝试使用rm -rf node_modules重新安装; npm install