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