Поскольку вы используете v4 реактивного маршрутизатора, вам больше не нужно обращаться к маршрутизатору из контекста. Вы можете получить к ним доступ через props
import React from "react";
import PropTypes from "prop-types";
class Search extends React.Component {
searchRef = React.createRef();
handleSubmit = (e) => {
e.preventDefault();
const searchTerm = this.searchRef.current.value;
// get the value of that input
this.props.history.push(`/search/${searchTerm}`);
};
render() {
return (
<div className="search">
<form onSubmit={this.handleSubmit}>
<input
type="text"
ref={this.searchRef}
placeholder="Hoppy"
//assign that ref to a DOM node
/>
<input type="submit" value="Search" />
</form>
</div>
);
}
}
export default Search;
Также убедитесь, что поиск отображается по маршруту, например
<Route path="/somesearchpath" component={Search} />
Если поиск не является прямым дочерним элементом Route, вам необходимо использовать withRouter
, чтобы обернуть поиск и использовать свойства маршрутизатора
import { withRouter } from 'react-router';
...
export default withRouter(Search);