Parse 在 React Native 中找不到 localStorage 变量

Parse can't find localStorage variable in React Native

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

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

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

我降级到 1.5.0 并正在工作。

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

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

上找到了这个

As of version 1.6, the Parse JS SDK has a different build for React Native. If you're using Parse+React on React Native, you'll need to require the 'parse-react/react-native' package instead.

例如:

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

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

在 1.6.0 中,Parse 强制我们使用本地存储,而 React Native 不支持它。然而,React Native 确实支持 AsyncStorage.

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

所以那些偶然发现这个并且不想被迫使用 Parse+React 的人你的答案是降级到 1.5,在你的 package.json 中将你的依赖项更改为 "parse": "1.5.0".

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

npm install localstorage-polyfill

然后在App.js

import 'localstorage-polyfill'; 

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