Реакция маршрутизатора this.props.history.push изменила URL-адрес, но не компонент?

Я использую React Router v4, обычно у меня нет проблем, он отлично работает даже с @withRouter

this.props.history.replace("/dashboard")

но на этот раз у меня проблемы с его использованием с редуксом.

https://codesandbox.io/s/pm0yvwp2jj

Маршрут изменился, но почему компонент не перерисовывается? Я должен увидеть содержимое: столкновение войны, если я перехожу к dashboard/2, маршрут не переключается, работает только при обновлении.


person Community    schedule 27.06.2018    source источник
comment
@Shubham, gerivedStateFromProps не срабатывает, когда я ввожу dashboard/index   -  person    schedule 27.06.2018
comment
Поскольку вы хотите получить данные, вы должны сделать это в функции componentDidUpdate, а не в getDerivedStatefromProps. Также для работы getDerivedStateFromProps ваша версия реакции должна быть ›= v16.3   -  person Shubham Khatri    schedule 27.06.2018
comment
getDerivedStateFromProps вообще не срабатывал, проверил package.json, это v16.3   -  person    schedule 27.06.2018
comment
пожалуйста, обновите свою песочницу, я посмотрю   -  person Shubham Khatri    schedule 27.06.2018
comment
@ShubhamKhatri спасибо, обновил коды и коробку ... но почему я должен использовать componentDidUpdate? у него нет nextProps для сравнения. Странно, зачем мне вообще сравнивать? обычно this.props.history.push работает нормально.   -  person    schedule 27.06.2018
comment
Пожалуйста, внимательно прочитайте ответ на дублирующий вопрос, когда параметры обновляются, компонент не перемонтируется, а повторно отображается с обновленными реквизитами.   -  person Shubham Khatri    schedule 27.06.2018
comment
getDerivedStateFromProps - это проблема с опечаткой, просто посмотрите на другой вопрос, который вы задали.   -  person devserkan    schedule 27.06.2018
comment
@ShubhamKhatri stackoverflow.com/a/48139367/9728810 опечатка для getDerivedStateFromProps   -  person    schedule 27.06.2018
comment
@Melissa92, спасибо, что указали на это. Я обновил свой ответ там   -  person Shubham Khatri    schedule 27.06.2018
comment
@ShubhamKhatri, вы уверены, что это можно решить с помощью componentDidUpdate? См. мои последние коды и ящик codesandbox.io/s/l53x2z4qpq в Containers/dashboard/user/NotificationDetail, я всегда получайте один и тот же объект для this.props.notification.   -  person    schedule 27.06.2018
comment
Чего вы на самом деле хотите добиться, так это получать уведомления каждый раз, когда параметры маршрута изменяются. Это работа для componentWillReceiveProps. Если ваш параметр идентификатора маршрута не равен между вашими текущими реквизитами и следующими реквизитами, отправьте fetchNotification. Это должно быть сделано в компоненте более высокого порядка, чтобы держать вещи сухими. Я быстро закодировал это в вашей песочнице: codesandbox.io/s/6jy6y63o7r   -  person Eld0w    schedule 27.06.2018
comment
@ Eld0w, зачем тебе для этого нужен hoc? обычно контейнер будет содержать много других компонентов, поэтому я буду использовать componentWillReceiveProps только один раз для каждого контейнера.   -  person    schedule 28.06.2018
comment
Это действительно зависит от ваших потребностей и предпочтений. Hoc можно использовать в любом другом месте, где вам нужно, чтобы ваш магазин избыточности был загружен уведомлениями. (Например, если вы обновите страницу). Я предпочитаю размещать такие действия внутри hocs, поскольку они могут понадобиться в самых разных местах вашего приложения. Вы также можете сделать более общий вариант с параметрами маршрута для проверки и действием выборки в качестве аргументов.   -  person Eld0w    schedule 28.06.2018
comment
Обычно я помещаю этот тип hoc над компонентом класса контейнера.   -  person Eld0w    schedule 28.06.2018