2015-09-12 18 views
6

Tôi có ứng dụng React Native hoạt động tốt với trình gỡ lỗi Chrome đang mở. Khi tôi vô hiệu hóa nó, mặc dù tôi vẫn gặp lỗi sau đây bất cứ khi nào tôi cố gắng thực hiện bất kỳ Parse gọi:Phân tích cú pháp không thể tìm thấy biến localStorage trong React Native

React Native and Parse error

Cuộc gọi chồng dẫn lại cho đoạn mã sau cố gắng đăng nhập người dùng trong:

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

Tôi đã thử xóa bảng điều khiển bảng điều khiển, trong trường hợp lỗi phải thực hiện với bảng điều khiển không khả dụng, nhưng không có kết quả. Điều này xảy ra với các cuộc gọi Parse khác và luôn phải thực hiện với biến số localStorage bị thiếu.

Cảm ơn bạn đã giúp đỡ!

CẬP NHẬT:

Có vẻ như có sự cố tương tự với Firebase. https://groups.google.com/forum/#!topic/firebase-talk/Y_usPRhOIYA

Họ đề cập đến vấn đề phải làm với không có một polyfill cho localStorage.

Trả lời

10

Các câu trả lời ở trên về mặt kỹ thuật, nhưng Parse đã cung cấp giải pháp không yêu cầu polyfil hoặc hạ cấp. Điều này là do sự thiếu đọc vĩnh viễn của tôi. Tôi thấy điều này trên 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.

Ví dụ:

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

Xin lỗi vì đã không nhắc đến tôi đã sử dụng Parse Phản ứng là tốt. Tôi nghĩ rằng vấn đề là chỉ với Parse, vì tôi đã không bắt đầu thêm đăng ký dữ liệu thông qua Parse React.

+1

Sử dụng Parse v1.6.4 và React-Native v2.14.3. Khi tôi thử các yêu cầu như được hiển thị ở đây tôi nhận được lỗi sau: 'Yêu cầu mô-đun không xác định" phân tích cú pháp phản ứng/phản ứng bản địa ". Nếu bạn chắc chắn rằng 'module là có, hãy thử khởi động lại packager. Giống như bản gốc, sử dụng bản gốc bao gồm: 'var Parse = require ('parse'). 'var ParseReact = require ('parse-react'); vẫn hoạt động tốt nếu tôi đang ở chế độ gỡ lỗi và trong trình giả lập iOS, nhưng trong trình giả lập Android và trên các thiết bị thực tế mã luôn phàn nàn về localStorage không được tìm thấy. –

2

Đúng (với polyfill). Không có localStorage được thêm vào dưới dạng polyfill cũng như công cụ javascriptCore nhúng của Apple có localStorage được triển khai (trong đó v8 của Chrome đã triển khai thực hiện khóa học). Lý do chính là localStorage là đồng bộ và React chỉ hoạt động với các hoạt động không đồng bộ theo thiết kế.

Có một giải pháp đẹp/mini-polyfill thay thế localstorage bằng phiên bản trong bộ nhớ: https://gist.github.com/juliocesar/926500. Điều đó sẽ cho phép phân tích cú pháp sử dụng localstorage cho bộ nhớ cache (đó là mục đích chính mà họ đang sử dụng nó bây giờ tôi tin). Dữ liệu sẽ không được lưu trữ liên tục giữa các lần thực hiện ứng dụng. Tôi không chắc liệu bạn có thể vô hiệu hóa việc sử dụng localstorage bởi Parse hay không, nhưng đó là một khả năng khác để khám phá.

2

Tôi hạ cấp xuống 1.5.0 và đang hoạt động ngay bây giờ.

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

Tôi không nghĩ rằng thậm chí bị buộc phải sử dụng Parse + React là một giải pháp đủ tốt. Ví dụ: tôi đang xây dựng ứng dụng của mình với Redux, điều này có ý nghĩa hơn đối với tôi để giữ tất cả các yêu cầu API của tôi bên trong người tạo hành động của tôi.

Trong 1.6.0 Phân tích cú pháp đang buộc chúng tôi sử dụng Bộ nhớ cục bộ, khi React Native không hỗ trợ nó. Tuy nhiên, React Native hỗ trợ AsyncStorage.

Đối với tôi, tôi chỉ hạ cấp xuống 1.5, hy vọng họ sẽ cung cấp tùy chọn sử dụng Bộ nhớ cục bộ hoặc Bộ nhớ không đồng bộ trong tương lai.

Vì vậy, những người vấp ngã điều này và không muốn bị buộc phải sử dụng Parse + Phản hồi câu trả lời của bạn là hạ cấp xuống 1,5, trong số package.json thay đổi phụ thuộc của bạn thành "parse": "1.5.0".

Các vấn đề liên quan