2017-10-04 15 views
0

これは私の最初の投稿です。私の質問が私のために多くの人に役立つことを願っています。Javascript(反応するネイティブ) - 外側スコープのgetterを使用してください。

私はPython、C/C++、Javaなどから来ています。私はweb-devの全面的なnoobです。私はReact Nativeでアプリケーションを開発しようとしていますが、いくつか問題があります。

私が練習する言語では、通常、getterを使用して別のクラスのクラスの属性を返します。 それが私のアプリケーションでやろうとしていることです。

のは、私は、このクラスがあるとしましょう:だから

class FacebookLogin extends Component { 

    constructor(props) { 
    super(props); 
    this.isFbProfileLoggedIn = false; 
    this.accessTokenOfFbProfile = ""; 
    } 

    getFbProfileLoggedIn() { 
    return this.isFbProfileLoggedIn; 
    } 

    getAccessToken() { 
    return this.accessTokenOfFbProfile; 
    } 

    render() { 
    return(
     <LoginButton 
     readPermissions = { readPermissionsOnFbProfile } 
     onLoginFinished = { 
      (error, result) => { 
      if (error) { 
       alert(strErrorLogin); 
      } else if (result.isCancelled) { 
       alert(strErrorLogin); 
      } else { 
       this.isFbProfileLoggedIn = true; 
       console.log(); 
       AccessToken.getCurrentAccessToken() 
       .then((data) => { 
        this.accessTokenOfFbProfile = data.accessToken; 
        alert(this.accessTokenOfFbProfile.toString()); 
       }); 
      } 
      } 
     } 
     onLogoutFinished = {() => alert("Logged out.") } 
     /> 
    ); 
    } 
} 

、私は私の属性の実際の値を返すクラス内部のゲッターメソッドに呼び出すとき、私はからゲッターに呼んでいるとき彼らは自分の持っていた最初の価値を返してくれるだけで、本当の価値はありません。また、グローバル変数の属性を置き換えたとき、同じprocessusを実行すると、魅力的に機能します。

グローバル変数を使用しない理由と方法について教えてください。

ありがとうございます!そして、私のnoobismを許してください:/

+0

ここではどの方法について話していますか?そして、あなたは外の範囲で何を意味しますか? – MinusFour

答えて

0

私は想像することができる問題は、それがクラスインスタンスと同じではない関数のthisの参照です。現在のインスタンスで関数をバインドしてみてください。このように

class FacebookLogin extends Component { 

    constructor(props) { 
    super(props); 
    this.isFbProfileLoggedIn = false; 
    this.accessTokenOfFbProfile = ""; 
    this.onLoginFinished = this.onLoginFinished.bind(this); 
    } 

    getFbProfileLoggedIn() { 
    return this.isFbProfileLoggedIn; 
    } 

    getAccessToken() { 
    return this.accessTokenOfFbProfile; 
    } 

    onLoginFinished(error, result) { 
    if (error) { 
     alert(strErrorLogin); 
    } else if (result.isCancelled) { 
     alert(strErrorLogin); 
    } 
    this.isFbProfileLoggedIn = true; 
    AccessToken.getCurrentAccessToken().then((data) => { 
     this.accessTokenOfFbProfile = data.accessToken; 
     alert(this.accessTokenOfFbProfile.toString()); 
    }); 
    } 


    render() { 
    return (
     <LoginButton 
     readPermissions={readPermissionsOnFbProfile} 
     onLoginFinished={this.onLoginFinished} 
     onLogoutFinished={() => alert("Logged out.")} 
     /> 
    ); 
    } 
} 
+0

よく動作していないようです:/ btw、私はアプリケーションのメインjsファイルのcomponentWillMount()内で呼び出されるsetTimeout関数の中でgetメソッドを呼び出します。 –

+0

あなたはどのようにそれを呼び出すのか少しの例を追加できますか? – williamcabrera4

+0

確かに、私はそのような何かをした: isFbProfileLoggedIn(){ たsetInterval(()=> { = fbLogin.stateProfileLoggedInをしましょう。 にconsole.log(a)は、 }、500); ------------------------------------------------ componentWillMount(){ this.isFbProfileLoggedIn(); ------------------------------------------------ これは、グローバル変数を使用する場合を除いて、常に私を偽に表示します。 –

関連する問題