成员函数未定义-javascript

成员函数未定义-javascript,javascript,reactjs,react-native,es6-class,Javascript,Reactjs,React Native,Es6 Class,我上过这门课: import React, {Component} from 'react'; import { View, ActivityIndicator, Button } from 'react-native'; import Auth from '../api/Auth'; export default class LoginScreen extends React.Component { constructor(props) {

我上过这门课:

import React, {Component} from 'react';

import {
    View,
    ActivityIndicator,
    Button
} from 'react-native';

import Auth from '../api/Auth';

export default class LoginScreen extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            alreadyLoggedIn: true
        };
        this.redirectToHome.bind(this);
        this.loginWithFacebook.bind(this);
    }

    componentWillMount() {
        Auth.isAlreadyLoggedIn().then((res) => {
            if(res == true) {
                this.redirectToHome();
            } else {
                this.setState({alreadyLoggedIn: false});
            }
        });
    }

    redirectToHome() {
        this.props.navigator.resetTo({
            screen: 'homeScreen',
            title: 'Meetups'
        });
    }

    loginWithFacebook() {
        Auth.loginWithFacebook().then((success) => {
            if(success == true) {
                this.redirectToHome();
            }
        }).catch((err) => {
            console.error(err);
        });

    }

    render() {
        return(
            <View>
                {this.state.alreadyLoggedIn == false &&
                    <Button title="Login with Facebook" onPress={this.loginWithFacebook} />
                }
                {this.state.alreadyLoggedIn == true &&
                    <ActivityIndicator animating={this.state.alreadyLoggedIn} />
                }
            </View>
        );
    }
 }

我是否以错误的方式访问此函数?我无法将函数设置为静态,它需要
对象


我应该怎么做?

您需要实际更新构造函数中的“成员函数”:

this.redirectToHome = this.redirectToHome.bind(this);
this.loginWithFacebook = this.loginWithFacebook.bind(this);

问题是您在构造函数中对函数进行了错误的绑定

constructor(props) {
    super(props);
    this.state = {
        alreadyLoggedIn: true
    };
    this.redirectToHome = this.redirectToHome.bind(this);
    this.loginWithFacebook = this.loginWithFacebook.bind(this);
}

this.loginWithFacebook.bind(this)将在正确绑定后返回一个新函数,然后需要使用返回的函数。现在,由于您没有分配这个新添加的函数,使用
this.loginWithFacebook
您将在没有绑定的情况下引用您自己定义的函数,因此
这个。redirectToHome
将不起作用,因为它里面的
这个
不会引用正确的上下文

它起作用了!但是,为什么我只使用
this.loginWithFacebook.bind(this)
?我的意思是,在这之后,我可以用Facebook函数在LoginWithFacebookFunction中执行此操作,而无需在构造器中进行更新。它起作用了!但是,为什么我只使用
this.loginWithFacebook.bind(this)
?我的意思是,在这之后,我可以使用Facebook函数在LoginWith中执行
this.props
,而无需在构造函数中更新它,因为您只使用其中一个作为事件处理程序。我不会那么做的。
constructor(props) {
    super(props);
    this.state = {
        alreadyLoggedIn: true
    };
    this.redirectToHome = this.redirectToHome.bind(this);
    this.loginWithFacebook = this.loginWithFacebook.bind(this);
}