Я только что столкнулся с подобной проблемой. Я думаю, что вы объединяете обновление / перерисовку и перемонтирование. Эта диаграмма методов реакции жизненного цикла помогла мне, когда я имел с ней дело.
Если ваша проблема похожа на мою, у вас есть такой компонент, как
class Card extend Component {
componentDidMount() {
// call fetch function which probably updates your redux store
}
render () {
return // JSX or child component with {...this.props} used,
// some of which are taken from the store through mapStateToProps
}
}
При первом обращении к URL-адресу, на котором монтируется этот компонент, все работает правильно, а затем, когда вы посещаете другой маршрут, использующий тот же компонент, ничего не меняется. Это потому, что компонент не перемонтируется, он просто обновляется, потому что некоторые реквизиты изменились, по крайней мере this.props.match.params
меняется.
Но componentDidMount()
не вызывается при обновлении компонента (см. Ссылку выше). Таким образом, вы не получите новые данные и не обновите свой магазин. Вы должны добавить функцию componentDidUpdate()
. Таким образом, вы можете снова вызывать свои функции извлечения при смене реквизита, а не только при первоначальном монтировании компонента.
componentDidUpdate(prevProps) {
if (this.match.params.id !== prevProps.match.params.id) {
// call the fetch function again
}
}
Проверьте реакцию документацию для более подробной информации.