我有一个React Native应用程序,可以在Chrome调试器打开时正常运行。一旦我禁用它,每当我尝试进行任何Parse调用时,我都会收到以下错误:
调用堆栈返回以下代码,尝试将用户登录到:
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有关。
答案 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