【问题标题】:React native method is undefinedReact 本机方法未定义
【发布时间】:2018-11-19 12:56:26
【问题描述】:

我试图在 AccessToken.getCurrentAccessToken() 中调用 signInWithFacebook 方法,但获取 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);

【问题讨论】:

  • 您是否收到 signInWithFacebook() is undefined 错误或无法调用 signInWithFacebook() of undefined 错误?
  • 我不明白您为什么要将它发送到您的道具。没有必要。也许只是在没有 this.props 的情况下调用 signInWithFacebook。
  • 我正在使用 redux-thunk 进行 api 调用,如果我不使用 props 它将不起作用。
  • 好吧,酷。抱歉没有看到您使用的是 redux。我认为您的问题实际上在于您映射到道具的方式。试试下面的例子:const mapToProps = () =&gt; { return { signInWithFacebook } }; export default connect(mapToProps)(FacebookLogin);
  • 您是否也可以包含您的身份验证文件?因为如果这不起作用,那么我认为它没有任何价值。确保您的函数名称完全相同并且正确导出。

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


【解决方案1】:

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

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 中发出一个事件,因此您的 this 范围已更改并且您得到未定义的 signInWithFacebook.. 笔记: - 使用 addEventListener() 附加函数时, this 的值会更改...

【讨论】:

    【解决方案2】:

    在上一个版本中发生了变化。

    logInWithReadPermissionsold react-native-fbsdk 0.8.0 版的方法。

    logInWithPermissions 应该使用,因为 react-native-fbsdk 版本 0.10.0。

    【讨论】:

    • 我正在研究如何在不进行大量更改(使用按钮)的情况下更新登录到 ios fbsdk 5.5,并且 facebooks 文档已经过时,非常感谢。
    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多