Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using this.setState in a callback

I have the following code getting a twitter timeline in a react component:

  componentWillMount: function() {
    twitter.get('statuses/user_timeline',
    function(error, data) {
      this.setState({tweets: data})
     });
  }

But I can't set the state there, because this isn't set to the component in that callback function.

How can I set the state within that callback?

n.b. console.log(data) instead of this.setState works fine, which is why I suspect the problem is with the this variable.

like image 808
sanjaypoyzer Avatar asked Mar 10 '26 15:03

sanjaypoyzer


2 Answers

You can set this with .bind method like this, and call twitter.get in componentDidMount as in this example

componentDidMount: function() {
   twitter.get('statuses/user_timeline', function(error, data) {
      this.setState({tweets: data})
   }.bind(this)); // set this that refers to you React component
}
like image 58
Oleksandr T. Avatar answered Mar 12 '26 05:03

Oleksandr T.


Never perform ajax call in componentWillMount.

Do it in componentDidMount.

Also there is a scope problem, for that use what Alexander suggest (bind). Another possibility is:

componentDidMount: function() {
    var self = this;
    twitter.get('statuses/user_timeline', function(error, data) {
        self.setState({tweets: data})
    });
}

Also more details here http://facebook.github.io/react/tips/initial-ajax.html (already underlined by klimo in comments)

like image 45
François Richard Avatar answered Mar 12 '26 04:03

François Richard



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!