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.
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
}
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With