Задать вопрос
@R-Oscar

Как правильно выполнять ajax-запросы в react-router?

Использую react-router v3

Предположим, что есть компонент, который осуществляет get-запросы на основе параметров, переданных в URL.

Где должен находиться непосредственно запрос? Если поместить его в componentDidMount() и componentDidUpdate(), последний будет срабатывать циклически (что вполне логично, так как результат запроса помещается в state компонента, что вызывает очередное обновление).

Также пытался использовать свойство onEnter у роута (документация), но nextState оказался иммутабельным объектом, поэтому результат с запроса в компонент не передается.
  • Вопрос задан
  • 554 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
devellopah
@devellopah
componentDidUpdate(prevProps){
    props.params.id !== prevProps.params.id && dispatch(fetchData());
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@LiguidCool
Я использую вызов в componentWillMount(), либо в конструкторе. Ну и тут вам возможно помогут.
Ответ написан
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Запрос должен находиться либо в componentDidMount, либо в componentWillMount.
Зачем вам componentDidUpdate?

P.S. недавно меня спрашивали тоже самое, и если у вас проблема в том, что не "происходит" componentDidMount при изменении параметра роута, то здесь нужно использовать componentWIllReceiveProps(!)

Пример: <Route path='/articles/:id' >
Вы открываете браузер по URL адресу: /articles/1
У вас в componentDidMount происходит вызов (например: getArticles(this.props.params.id)

Затем вы кликая по ссылке, изменяете URL на /articles/2 и ожидаете что произойдет componentDidMount ? Нет, не произойдет, так как роут ('/articles/:id') не изменился, следовательно не было "демонтирования" и "примонтирования" компонента. Зато случилось "изменение props" в компоненте (того самого this.props.params.id), следовательно это можно обработать в componentWillReceiveProps
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы