Если вы хотите, чтобы компонент перерисовывался, вам нужно установить состояние. Строка, подобная этой, , а не вызывает повторную визуализацию компонента:
this.searchRes = <SearchResults searchRes={response.data}/>
Единственный раз, когда вы устанавливаете состояние, это когда происходит изменение, и в это время this.searchRes устанавливается в все, что вы установили в последний раз, когда поиск закончился. Так что вы всегда будете рендерить его в этот последний раз.
Исправление - перевести результаты в состояние:
constructor(props) {
super(props);
this.http = new Http();
this.state = {
phrase: '',
results: null
};
}
//...
sendPhrase() {
return this.http.post('v1/search', {'phrase': this.state.phrase})
.then(response =>
this.setState({ results: response.data })
);
}
render() {
return (
<>
<Col xs={12}>
<SearchBar handleChange={this.handleChange} phrase={this.state.phrase}/>
</Col>
<Col xs={12}>
{this.state.results && (
<SearchResults searchRes={this.state.results}/>
)}
</Col>
</>
);
}