I am building a little search engine and got following problem:
Everytime I enter a query, the last letter is missing. I figured out, that it has something to do with setState and that it is not asynchronous... But I can not come up with a solution fo my case.
Her is my function:
searchHandler = ({ target: { value } }) => {
this.setState({ term: value });
this.updateMessage(value);
if(this.state.message.length === 0){
this.setState({hasMoreItems: false})
this.componentDidMount();
}else{
var requestUrl = 'https://questdb.herokuapp.com/all?q='
fetch(requestUrl + this.state.message).then((response)=>{
return response.json();
}) .then((data)=>{
this.setState({ tracks: data});
})
}
}
updateMessage = message => this.setState({ message });
Do you have any suggestions for me?
Thanks a lot!
this.setState()
can be passed a callback function that will execute once the state is actually set with the new value. You can use it like so:In general, you want to use the second argument of
setState()
, which accepts a callback function which will run with the updated state. Here's an example:Live example here.