javascript - React Native 方法未定义

标签 javascript react-native redux react-native-fbsdk

我尝试在 AccessToken.getCurrentAccessToken() 中调用 signInWithFacebook 方法,但获取 signInWithFacebook 未定义。如果我在 LoginManager.logInWithReadPermissions 函数之外调用该方法,则该方法可以正常工作。我似乎无法调用 LoginManager.logInWithReadPermissions

内的任何方法

我是本地 react 新手,请帮忙。谢谢。

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);

最佳答案

为此,只需在代码中添加一行:--

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 .. 笔记: - 当使用 addEventListener() 附加函数时,该函数的值会发生变化...

关于javascript - React Native 方法未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53375141/

相关文章:

linux - Expo xde 没有在 centOS 上启动?

javascript - 更新 redux 中的多个值

javascript - 如果某些输入区域未填写,如何防止表单提交

javascript - .not() 不工作

JavaScript:提交期间未验证表单值

javascript - 使用 ajax 请求测试响应单击按钮

javascript - 为什么 map 上的圆圈大小会变化?

firebase - 使用 firebase 密码重置链接打开我的应用程序的特定屏幕

node.js - 对某些案例问题的警告 computedMatch 使用react?

reactjs - Redux 表单 : returning a promise from asyncValidate using async functions