Реагировать на собственный метод не определено - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь вызвать метод signInWithFacebook внутри AccessToken.getCurrentAccessToken () , но получение signInWithFacebook не определено.Метод работает нормально, если я вызываю его вне функции LoginManager.logInWithReadPermissions .Кажется, я не могу вызвать какой-либо метод внутри LoginManager.logInWithReadPermissions

Я новичок, чтобы реагировать на родной, пожалуйста, помогите.Спасибо.

const FBSDK = require('react-native-fbsdk');
const {
  LoginManager,
  AccessToken,
} = FBSDK;
import React from 'react';
import { Text, View, TouchableOpacity, Image } from 'react-native';

import { connect } from 'react-redux';

import { firebaseActions as auth } from "../actions";
const { signInWithFacebook } = auth;



class FacebookLogin extends React.Component {
  constructor() {
    super();

    this.onSuccess = this.onSuccess.bind(this);
    this.onError = this.onError.bind(this);
    this.onSignInWithFacebook = this.onSignInWithFacebook.bind(this);
  }

  async onSignInWithFacebook() {

    LoginManager.logInWithReadPermissions(["public_profile"]).then(
      function (result) {
        if (result.isCancelled) {
          console.log("Login was Cancelled");
        } else {

          AccessToken.getCurrentAccessToken().then(
            (data) => {
              this.props.signInWithFacebook(data.accessToken, this.onSuccess, this.onError);
            }
          );
        }
      },
      function (error) {
        console.log("An error has occured" + error);
      }
    );

  }

  onSuccess({ exists, user }) {
    console.log(
      "Login Success"
    );

  }

  onError(error) {
    console.log(error.message);
  }

  render() {
    return (
      <View>
        <TouchableOpacity
          onPress={this.onSignInWithFacebook}
        >
          <Text>Login</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

export default connect(null, { signInWithFacebook })(FacebookLogin);

1 Ответ

0 голосов
/ 20 ноября 2018

для этого добавьте только одну строку в ваш код как: -

async onSignInWithFacebook() {
    const _this = this;
    LoginManager.logInWithReadPermissions(["public_profile"]).then(
      function (result) {
        if (result.isCancelled) {
          console.log("Login was Cancelled");
        } else {

          AccessToken.getCurrentAccessToken().then(
            (data) => {
              _this.props.signInWithFacebook(data.accessToken, this.onSuccess, this.onError);
            }
          );
        }
      },
      function (error) {
        console.log("An error has occured" + error);
      }
    );

  }

В вашем коде LoginManager отправляет событие, поэтому ваша область действия изменяется, и вы получили неопределенный signInWithFacebook .. notes: - КогдаПрикрепление функции с помощью addEventListener () значение этого изменяется ...

...