В моем приложении для реагирования с настройками react-apollo
и react-router-redux
каждый раз, когда я отправляю на новый маршрут, новый параметр запроса запускает новый запрос GraphQL. И мне часто требовались обратные вызовы после выполнения запроса.
Я не могу этого сделать в componentDidMount
, потому что компонент никогда не выходит, он только повторно отрисовывается.
Итак, я нашел это решение здесь, в котором используются:
componentWillRecieveProps(nextProps){
if (!nextProps.data.loading && this.props.data.loading) {
doMyCallBack();
}
}
Он работает отлично, но я не понимаю, почему. Как я заметил, componentWillReceiveProps
запускается 3 раза при отправке на новый маршрут:
1) При переходе по ссылке:
nextProps.data.loading: true
this.props.data.loading: false
2) В какой ситуации верны обе переменные?
nextProps.data.loading: true
this.props.data.loading: true
3) Здесь мы выполняем обратные вызовы. Но данные все еще загружаются ??
nextProps.data.loading: false
this.props.data.loading: true
Последнее происходит, когда компонент получает новые реквизиты от других действий и не запускает запросы apollo, что совершенно логично:
nextProps.data.loading: false
this.props.data.loading: false
Я не могу понять, что происходит на шагах 1, 2 и 3.