I am trying to setState of a component after a ajax callback receives data from REST api. here's my code for the component constructor
constructor(props) {
super(props);
this.state = { posts: [] };
this.getPosts = this.getPosts.bind(this);
}
Then I have a componentDidMount
method that looks like following.
componentDidMount() {
this.getPosts();
}
Now here's my getPosts function where I am doing the ajax request.
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
this.setState( { posts: data } )
}
});
}
I am tying to set the State but I am getting the following error.
this.setState is not a function
Not really sure what is causing this. It would be really helpful if someone points me to the right direction. Thanks in advance.
Bind the callback function also so that this
inside the callback points to the context of the React Component and not the callback function
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: (data) => {
this.setState( { posts: data } )
}
});
}
or you could use bind like
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
this.setState({ posts: data })
}.bind(this)
});
}
The issue is related with loosing context of this. Please try this:
let self = this;
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
self.setState( { posts: data } )
}
});
}
or you can use bind:
getPosts = () => {
$.ajax({
type: 'get',
url: urlname,
success: function(data) {
self.setState( { posts: data } )
}
});
}.bind(this)
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