2015-09-12 2 views
6

Ich habe eine React Native App, die gut mit dem geöffneten Chrome-Debugger funktioniert. Sobald ich es aber deaktivieren, halte ich die folgende Fehlermeldung erhalten, wenn ich zu machen versuchen, zu einem Parse ruft:Parse kann LocalStorage-Variable in React Native nicht finden

React Native and Parse error

Die Call-Stack führt zurück zu dem folgenden Code versuchte, einen Benutzer anmelden:

Parse.User.logIn(
    email, 
    password, 
    { 
    success: function(res) { 
     console.log('success'); 
    }, 
    error: function(error) { 
     console.log(error.code + ' ' + error.message); 
    } 
    } 
); 

Ich habe versucht, die Konsolenanweisungen zu entfernen, falls der Fehler damit zu tun hatte, dass die Konsole nicht verfügbar ist, aber kein Erfolg. Dies passiert bei anderen Parse-Aufrufen und hat immer mit der fehlenden localStorage-Variable zu tun.

Vielen Dank im Voraus für jede Hilfe!

UPDATE:

Sieht aus wie es ein ähnliches Problem mit Firebase ist. https://groups.google.com/forum/#!topic/firebase-talk/Y_usPRhOIYA

Sie erwähnen, dass das Problem damit zu tun hat, dass es kein Polyfill für localStorage gibt.

Antwort

10

Die obigen Antworten sind technisch richtig, aber Parse hat eine Lösung bereitgestellt, die kein Polyfil oder Downgrade erfordert. Dies lag an meinem andauernden Mangel an Lesen. Ich fand dies auf der 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.

Zum Beispiel:

// For React Native apps 
var React = require('react-native'); 
var Parse = require('parse/react-native'); 
var ParseReact = require('parse-react/react-native'); 

Sorry für die nicht zu erwähnen, ich war mit Parse und Reagieren. Ich dachte, das Problem bestehe nur bei Parse, da ich noch nicht begonnen habe, Datenabonnements über Parse React hinzuzufügen.

+1

Verwenden von Parse v1.6.4 und React-Native v2.14.3. Wenn ich versuche, die wie hier gezeigt erfordert bekomme ich folgende Fehlermeldung: 'Erfordern unbekannt Modul„Parse reagieren/reagieren-native“. Wenn Sie sicher sind, dass das Modul vorhanden ist, starten Sie den Packager neu. Wie bei dem Original-Poster enthält das Original mit: 'var Parse = require ('Parse') Parse;. 'var ParseReact = require ('parse-react'); funktioniert immer noch gut, wenn ich im Debug-Modus bin, und in dem iOS-Emulator, aber im Android Emulator und auf aktuelle Geräten, den Code immer über beschwert localstorage nicht gefunden werden. –

2

Das ist korrekt (mit Polyfill). Es wurde weder localStorage als Polyfill hinzugefügt, noch hat die eingebettete JavaScriptCore-Engine von Apple localStorage implementiert (wo es natürlich in Chrome v8 implementiert ist). Der Hauptgrund dafür ist, dass localStorage synchron ist und React nur mit asynchronen Operationen arbeiten sollte.

Es gibt eine nette Lösung/Mini-Polyfill, die den lokalen Speicher durch eine In-Memory-Version ersetzt: https://gist.github.com/juliocesar/926500. Das sollte den lokalen Speicher für den Cache parsen lassen (das ist der Hauptzweck, den sie jetzt benutzen, glaube ich). Die Daten werden zwischen den Anwendungsausführungen nicht persistent gespeichert. Ich bin mir nicht sicher, ob Sie die Verwendung des lokalen Speichers durch Parse deaktivieren können, aber das ist eine andere Möglichkeit, die Sie erkunden können.

2

Ich habe auf 1.5.0 heruntergestuft und arbeite jetzt.

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

Ich glaube nicht, dass sogar die Verwendung von Parse + React eine Lösung ist, die gut genug ist. Zum Beispiel baue ich meine App mit Redux, es macht viel mehr Sinn für mich, alle meine API Anfragen in meinen Aktionserstellern zu halten.

In 1.6.0 zwingt Parse uns, Local Storage zu verwenden, wenn React Native es nicht unterstützt. React Native unterstützt jedoch AsyncStorage.

Für mich habe ich nur auf 1,5 herabgestuft, hoffentlich geben sie eine Option, in Zukunft Local Storage oder Async Storage zu verwenden.

Also Leute, die darauf stolpern und nicht gezwungen sein möchten, Parse + Reagieren zu verwenden, ist Ihre Antwort, um auf 1.5 herunterzustufen, in Ihrem package.json ändern Sie Ihre Abhängigkeiten zu "parse": "1.5.0".