Не удается прочитать свойство 'getItem' из неопределенного React Native и Parse - PullRequest
0 голосов
/ 30 апреля 2018

Я начал изучать React Native с Redux и создаю простой логин с помощью Google и Facebook, который я хочу отправить в бэкэнд Parse на AWS.

У меня есть следующий компонент кнопки Facebook:

import { Button } from 'react-native';
import { connect } from 'react-redux';
import React, { Component } from 'react';
import { LoginManager } from 'react-native-fbsdk';
import { createUser } from '../actions';

class FacebookButton extends Component {

  facebookButtonPressed(){
      this.props.createUser("dummyemail@gmail.com","12345");
  }

  render() {
    return (
      <Button
          onPress={this.facebookButtonPressed.bind(this)}
          title="Sign In with Facebook"
          color="#000000"
      />
    );
  }

}

export default connect(null,{ createUser })(FacebookButton);

Я еще не интегрировал Facebook, я просто хочу посмотреть, смогу ли я создать пользователя для разбора. Это действие, которое я использую:

import Parse from 'parse/react-native';

export const createUser = (email, name) => {
    return (dispatch) => {

      var user = new Parse.User();
      user.set("username", "my name");
      user.set("password", "my pass");
      user.set("name",name);
      user.set("email", email);

      // other fields can be set just like with Parse.Object
      user.set("phone", "415-392-0202");

      user.signUp(null, {
        success: function(user) {
          // Hooray! Let them use the app now.
          console.log("User created");
        },
        error: function(user, error) {
          // Show the error message somewhere and let the user try again.
          alert("Error: " + error.code + " " + error.message);
        }
      });


    }
};

Когда я запускаю отладчик в браузере, я вижу, что вызывается createUser, а когда мы вызываем user.signUp, я получаю следующую ошибку:

undefined is not an object (evaluating 'reactNative.AsyncStorage.getItem')

Когда я читаю документы Parse Javascript и пробую следующее:

//Get your favorite AsyncStorage handler with import (ES6) or require
import { AsyncStorage } from 'react-native'; 

//Before using the SDK...
Parse.setAsyncStorage(AsyncStorage);

Я звоню Parse.setAsyncStorage(AsyncStorage); в коде ниже.

import ReduxThunk from 'redux-thunk';
import reducers from './src/reducers';
import Parse from 'parse/react-native';
import { Provider } from 'react-redux';
import Login from './src/screens/Login';
import React, { Component } from 'react';
import { AsyncStorage } from 'react-native';
import { createStore, applyMiddleware } from 'redux';

export default class App extends Component {

  componentWillMount() {
      Parse.initialize("MY KEY");
      Parse.serverURL = 'MY URL';
      Parse.setAsyncStorage(AsyncStorage);
  }

  render() {
    const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));

    return (
      <Provider store={store}>
        <Login />
      </Provider>
    );
  }
}

Я получаю ошибку reactNative2.default.setAsyncStorage is not a function. Честно говоря, я пытался Parse.setAsyncStorage(AsyncStorage); в надежде исправить проблему AsyncStorage, упомянутую выше.

Итак, есть идеи, почему я получаю забавное сообщение об ошибке AsyncStorage при попытке создать пользователя Parse?

1 Ответ

0 голосов
/ 30 апреля 2018

Я оставляю здесь ответ на случай, если кто-то еще наткнется на другие вопросы. Проблема была в версии Parse, которую я использовал. Я использовал версию Parse 1.6.14. Шаги, чтобы исправить:

  1. Откройте файл package.json и обновите версию Parse до любой версии выше 1.11, для меня 1.11.1 сработало.
  2. В терминале: npm install

это должно решить проблемы, упомянутые выше, помните, что вы должны реализовать:

//Get your favorite AsyncStorage handler with import (ES6) or require
import { AsyncStorage } from 'react-native'; 

//Before using the SDK...
Parse.setAsyncStorage(AsyncStorage);

согласно документации.

...