Коммутатор React Router не монтирует один и тот же компонент для разных маршрутов

У меня есть эти маршруты

<Switch>
    <Route path='/1' render = {() => <ComponentA />} /> 
    <Route path='/2' render = {() => <ComponentA />} />
    <Route path='/3' render = {() => <ComponentA />} />
</Switch>

Когда я нажимаю на приложение на странице / 1, ComponentA отображается нормально. Но когда я перехожу к / 2, ComponentA не перемонтируется, но функция рендеринга срабатывает.

Если я использую другой компонент, он будет правильно установлен.

ComponentA меняет основу для рендеринга на props, и действие по извлечению данных запускается в componentDidMount.

Это предполагаемое поведение, может показаться, что мы не предполагаем повторно использовать компонент для разных маршрутов.

Просто любопытно, почему вы хотите рендерить один и тот же компонент в разных routes? Модификация props или state может просто изменить компонент.

Hearen 30.03.2018 04:01

Это интересный вопрос. Хотя я не знаю конкретного ответа на ваш вопрос, в более широком смысле, лучший способ сделать что-то вроде этого - использовать регулярное выражение в пути следующим образом: <Route path = "/ (1 | 2 | 3)" компонент = {ComponentA} />. Взято отсюда: stackoverflow.com/questions/40541994/…

raksheetbhat 30.03.2018 08:28

Спасибо, ребята, за комментарии. Это очень общий пример проблемы, с которой я столкнулся. ComponentA - это компонент начального уровня, который извлекает шаблон извне на основе маршрутов. Единственная реальная причина, по которой я использую Switch, заключается в том, что у меня может быть страница по умолчанию, когда страницы не существуют.

Leo Teng 30.03.2018 10:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
3
1 806
1

Ответы 1

Просто вставьте уникальный ключ в ваши компоненты рендеринга - и я это исправлю.

<Switch>
   <Route path='/1' render = {() => <ComponentA key = {1} />} /> 
   <Route path='/2' render = {() => <ComponentA key = {2} />} />
   <Route path='/3' render = {() => <ComponentA key = {3} />} />
</Switch>

Он работает как шарм! Могу ли я спросить, почему?

hiveer 03.02.2021 16:24

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