2016-06-28 9 views
3

同じクラスの中でメソッドを呼びたいと思っています。たとえば、ボタンをクリックすると、メソッドhandleLoginBtnClicked()がトリガーされます。同じクラスのメソッドcheckInputValidation()を呼び出すと思います。これを行う適切な方法は何ですか?ReactJSの同じクラスの中でメソッドを呼び出す方法は?

export default class LoginCard extends React.Component { 

    //If I click a button, this method will be called. 
    handleLoginBtnClicked() { 
     this.checkInputValidation(); 
    } 

    checkInputValidation() { 
     alert("clicked"); 
    } 
    ... 
    ... 
    ... 
    render() { 
     ... 
     <LoginBtn onClick={this.handleLoginBtnClicked}/> 
     ... 
    } 
} 

エラーメッセージ:

Uncaught TypeError: this.checkInputValidation is not a function 

答えて

3

あなたがコンポーネントのコンテキストにこれらの機能をバインドする必要があります。あなたがhandleLoginBtnClickedを結合している

export default class LoginCard extends React.Component { 
    constructor(props) { 
     super(props); 
     this.handleLoginBtnClicked = this.handleLoginBtnClicked.bind(this); 
     this.checkInputValidation = this.checkInputValidation.bind(this); 
    } 

    //This is the method handleLoginBtnClicked 
    handleLoginBtnClicked() { 
     ... 
    } 

    //This is the method checkInputValidation 
    checkInputValidation() { 
     ... 
    } 

    ... 
    .. 
    . 
} 
+0

これをコンストラクタで実行しない理由は何ですか? – lux

+0

これはうまくいきます。しかし、このようにするのはいいですか? – Casper

+0

@CasperLIこれはベストプラクティスの1つです。詳細は、[こちらのリンク先](http://egorsmirnov.me/2015/08/16/react-and-es6-part3.html)を参照してください。 –

1

constructor内には、これを行う必要がありますか?関数のコンテキストが失われ、特殊変数thisの意味が失われている可能性があります。 Reactが処理してonClickイベントをトリガーし、別のコンテキストから関数を呼び出して、それが失われた原因となります。

onClickイベントのイベントリスナーとして追加する新しいバインド関数を作成するには、次の構文を使用する必要があります。これにより、handleLoginBtnClickedのコンテキストが失われないことが保証されます。

<element onClick={this.handleLoginBtnClicked.bind(this)}> 
関連する問題