成员函数未定义-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);
}