Я использую React и Redux для поискового приложения.Используя react-router-dom
, я маршрутизирую /search/:term?
на компонент Search
:
<Router>
<Switch>
<Route exact path="/search/:term?" component={Search} />
<Redirect to="/search" />
</Switch>
const Search = (props) => {
const { term } = props.match.params;
return (
<div>
<SearchForm term={term}/>
<SearchResults />
</div>
)
};
Когда пользователь отправляет поиск в компоненте SearchForm
,Я отправляю действие для отправки поискового запроса.Я также инициирую поиск в конструкторе, если дан термин, изначально:
class SearchForm extends Component {
constructor(props) {
super(props);
const term = props.term ? props.term : '';
this.state = {
term: term,
}
if (term) {
this.props.submitSearch(term);
}
}
handleSubmit = (e) => {
e.preventDefault();
if (this.state.term) {
this.props.submitSearch(this.state.term);
}
}
render = () => {
<form
onSubmit={this.handleSubmit.bind(this)}>
...
</form>
}
}
Я использую withRouter
из react-router-dom
, поэтому URL обновляется при отправке запроса.
Проблема возникает, когда пользователь переходит назад в своем браузере. URL переходит назад, реквизиты обновляются (т.е. props.match.params.term
), но поиск не повторяется.Это связано с тем, что действие submitSearch
отправляется только в SearchForm.constructor
(поиск при начальной загрузке, если термин указан в URL) и SearchForm.handleSubmit
.
. Как лучше всего прослушивать изменение состояния?term
при изменении URL-адреса, а затем отправить поисковое действие?