ComponentDidMount не вызывается при изменении маршрута HashRouter

Прежде всего: Я знаю, что этот вопрос уже задавался здесь и что также уже есть решение. Пожалуйста, прочитайте весь пост, прежде чем отмечать его как дубликат

Я использую HashRouter из react-router-dom, и у меня есть простой маршрут:

<Route path='/folder/:folderId' component = {FileArea} />

Маршрутизация работает нормально, но, к сожалению, моя функция componentDidMount не вызывается после изменения маршрута. Это очень важно для работы моего приложения, поскольку мне приходится выполнять вызов API каждый раз, когда маршрут изменяется, чтобы получить соответствующие данные (в соответствии с параметром URL-адреса folderId).

Я нашел решение в Интернете, используя componentWillReceiveProps, и это сработало для меня, но, видимо, эта функция больше не будет работать в будущих версиях реакции: Реагировать на документацию

Я также знаю, что теоретически мог бы использовать static getDerivedStateFromProps(nextProps, prevState), но эта функция вызывается слишком часто, и было бы нелепо каждый раз вызывать API.

Есть ли альтернатива componentWillReceiveProps или способ вызвать componentDidMount?

Вы можете использовать componentDidUpdate для решения

Ryan Nghiem 27.05.2019 11:49

@RyanNghiem componentDidUpdate содержит только prevProps и prevState, но мне нужны следующие реквизиты

Tim Gerhard 27.05.2019 11:52
next props is this.props, next state is this.state
Ryan Nghiem 27.05.2019 11:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете использовать хуки жизненного цикла componentDidUpdate().

и чтобы получить данные маршрута в вашем компоненте, используйте this.props.match.params.folderId в этом методе

и чтобы остановить непрерывный вызов, добавьте условие if, которое будет вызываться только при изменении маршрута.

Я надеюсь, что это сработает!

Спасибо! Помогла последняя часть с предотвращением непрерывного звонка.

Tim Gerhard 27.05.2019 13:14

Другие вопросы по теме