2015-09-12 31 views
6

Mam aplikację React Native, która działa poprawnie z otwartym debugerem Chrome. Raz wyłączyć go jednak wciąż otrzymuję następujący błąd, gdy próbuję zrobić każdy Parse wzywa:Analiza składniowa nie może znaleźć zmiennej localStorage w React Native

React Native and Parse error

Wezwanie stos prowadzi z powrotem do następującego kodu próby zalogowania użytkownika w:

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

Próbowałem usunąć instrukcje konsoli, na wypadek gdyby błąd miał związek z niedostępnością konsoli, ale bez skutku. Dzieje się tak z innymi wywołaniami Parse i zawsze ma do czynienia z brakującą zmienną localStorage.

Z góry dziękuję za pomoc!

UPDATE:

Wygląda istnieje podobny problem z Firebase. https://groups.google.com/forum/#!topic/firebase-talk/Y_usPRhOIYA

Podkreślają, że problem polega na tym, że nie istnieje polyfill dla localStorage.

Odpowiedz

10

powyższych odpowiedzi są technicznie dobrze, ale Parse dostarczyła rozwiązanie, które nie wymaga polyfil lub obniżki. Wynikało to z mojego ciągłego braku czytania. Znalazłem to na 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.

Na przykład:

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

Przepraszamy za nie wspomnieć używałem Parse React również. Pomyślałem, że problem dotyczy właśnie programu Parse, ponieważ nie zacząłem dodawać subskrypcji danych za pośrednictwem narzędzia Parse React.

+1

Korzystanie z analizy v1.6.4 i React-Native v2.14.3. Kiedy próbuję wymagania, jak pokazano tutaj, pojawia się następujący błąd: 'Wymaganie nieznanego modułu" parsuj-reaguj/reaguj-natywnie ". Jeśli jesteś pewien, że 'moduł tam jest, spróbuj ponownie uruchomić paker. Podobnie jak w przypadku oryginalnego plakatu, użycie oryginału obejmuje: 'var Parse = require ('parsse'). 'var ParseReact = require ('parsowanie-reakcja'); nadal działa dobrze, jeśli jestem w trybie debugowania, oraz w emulatorze iOS, ale w emulatorze Androida i na rzeczywistych urządzeniach, które zawsze kodują, że nie można znaleźć pliku localStorage. –

2

Zgadza się (z polyfill). Nie dodaje się localStorage jako polyfill, ani wbudowany w Apple silnik javascriptCore nie ma wbudowanego localStorage (gdzie werset 8 przeglądarki Chrome został wdrożony oczywiście). Głównym powodem jest to, że localStorage jest synchroniczny i React powinien działać tylko z operacjami asynchronicznymi według projektu.

Istnieje fajne rozwiązanie/mini-polyfill, które zastępuje localstorage z wersją w pamięci: https://gist.github.com/juliocesar/926500. To powinno pozwolić sparsować użycie localstorage dla bufora podręcznego (to jest główny cel, w którym używają go teraz, jak sądzę). Dane nie będą trwale przechowywane między wykonaniem aplikacji. Nie jestem pewien, czy można wyłączyć użycie localstorage przez Parse, ale jest to kolejna możliwość do zbadania.

2

Zmieniono na 1.5.0 i działam teraz.

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

Nie sądzę, że nawet zmuszenie do użycia Parse + React jest wystarczająco dobrym rozwiązaniem. Na przykład buduję swoją aplikację z Redux, to ma dużo więcej sensu dla mnie, aby zachować wszystkie moje Żądania API wewnątrz moich twórców akcji.

W wersji 1.6.0 Parse zmusza nas do używania Local Storage, gdy React Native go nie obsługuje. React Native obsługuje jednak AsyncStorage.

Dla mnie zmniejszyłem tylko do 1,5, mam nadzieję, że w przyszłości dadzą opcję użycia pamięci lokalnej lub pamięci asynchronicznej.

Ludzie, którzy się na to natkną i nie chcą być zmuszeni do użycia analizy Parse + Reaguj na swoją odpowiedź, powinni zmienić ją na 1.5, zmienią twoje zależności na package.json na "parse": "1.5.0".

Powiązane problemy