2017-05-31 67 views
-1

我做这个类:成员函数 - JavaScript的

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

里面的loginWithFacebook功能,当它到达的地方调用redirectToHome函数的行,就这样说:

_this3.redirectToHome is not a function 

enter image description here

我是否以错误的方式访问此函数?我无法使该功能成为静态,并且它需要this对象。

我该怎么办?

回答

0

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

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

它的工作!但是,为什么当我使用'this.loginWithFacebook.bind(this)'时它会工作?我的意思是在此之后,我可以在loginWithFacebook函数中完成this.props,而不必在构造函数中更新它 –

1

的问题是,你做了正确的功能在构造函数中结合。

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你会refererring你自己定义的函数没有约束力,因此this.redirectToHome因为this将无法​​正常工作里面它不会是指正确的上下文

+0

它工作正常!但是,为什么当我使用'this.loginWithFacebook.bind(this)'时它会工作?我的意思是在此之后,我可以在loginWithFacebook函数中执行'this.props',而不必在构造函数 –

+0

中更新它,因为您只将其中一个用作事件处理程序。我只是不会那样做。 –