2016-12-27 11 views
0

私は値を返す簡単な約束を作成しました。この値は、反応コンポーネントの状態を更新する必要があります。しかし、コンポーネント関数setStateはpromise.then()スコープでは使用できないため、機能しません。レキシカルスコープを提供react.jsコンポーネントを約束どおりに更新するにはどうすればよいですか?

login_account(this.state.email, this.state.password).then(function (session_token) { 
       return this.setState({token: session_token}); 
      }); 

答えて

3

使用arrow function

login_account(this.state.email, this.state.password).then((session_token) => { 
      return this.setState({token: session_token}); 
     }); 
2

いくつかの方法があります。 ES6構文を使用できる場合は、arrow functionsを使用してください。スコープを変更していません。

ES6構文を使用できない場合は、this contexのダンプを作成してください。 - binddoc

var self = this;  
login_account(this.state.email, this.state.password).then(function (session_token) { 
     return self.setState({token: session_token}); 
}); 

他の方法、コールバック関数を使用して、ネイティブのJavaScript関数を使用して、コンテキストを変更するには:このように。おそらく次のようになります:

login_account(this.state.email, this.state.password) 
    .then(callbackFunction.bind(this, session_token)); 
関連する問題