Parse 在 React Native 中找不到 localStorage 变量

IT技术 javascript parse-platform reactjs react-native
2021-04-25 16:29:54

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

react本机和解析错误

调用堆栈会返回以下尝试登录用户的代码:

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 有关。

4个回答

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

从 1.6 版开始,Parse JS SDK 具有不同的 React Native 构建。如果你在 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 添加数据订阅。

没错(使用 polyfill)。没有添加 localStorage 作为 polyfill,Apple 的嵌入式 javascriptCore 引擎也没有实现 localStorage(当然,Chrome 的 v8 已经实现了)。主要原因是 localStorage 是同步的,而 React 设计上应该只适用于异步操作。

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

我降级到 1.5.0 并且现在正在工作。

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

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

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

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

因此,偶然发现这一点并且不想被迫使用 Parse+React 的人,您的答案是降级到 1.5,package.json将您的依赖项更改为"parse": "1.5.0".