Ваша проблема в том, что componentDidMount
выполняется только тогда, когда компонент полностью смонтирован, и это происходит только один раз. В этом случае изменение параметра маршрута не приводит к изменению компонента, я имею в виду, что вы все еще находитесь в том же компоненте, когда вы изменяете pageId
, поэтому componentDidMount
никогда не выполняется снова.
Что вы могли бы сделать тогда? Хорошо, я предлагаю вам изучить метод componentWillReceiveProps(newProps)
, он выполняется всякий раз, когда собирается изменить реквизит компонента, что в данном случае является тем, что вы ищете, потому что, согласно это
Вы будете иметь доступ к объектам соответствия в разных местах:
Компонент маршрута как this.props.match;
Маршрут отображается как ({match}) => ();
Направляйте детей как ({match}) => ();
withRouter as this.props.match;
matchPath в качестве возвращаемого значения;
объект соответствия (который содержит параметры маршрута) передается через реквизиты компонента.
Итак, короткий ответ. Используйте componentDidMount
для первой выборки, а затем componentWillRecieveProps(newProps)
для всех остальных вызовов.
проверьте это для получения дополнительной информации.
Примечание: я не знал, что componentWillRecieveProps(newProps)
должен был быть несколько устаревшим, в любом случае, он предлагает вам использовать getDerivedStateFromProps(nextProps, prevState)
, который в основном такой же