В React Router v4 все компоненты Router визуализируются при каждом изменении маршрута. - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь лучше понять, почему все мои компоненты выполняют рендеринг при каждом изменении маршрута в React Router v5.Обратите внимание, что эти компоненты только перерисовывают , а не перемонтируют .Когда я открываю расширение реагирования в инструментах разработчика и устанавливаю флажок Highlight Updates, я вижу, что все мои компоненты обрисовываются в общих чертах при изменении маршрутов, даже те компоненты, которые находятся на более высоком уровне, чем сопоставление маршрутов:

<Router>
  <MyHeader />
  <ComponentWithRoutes />
</Router>

В этом простом примере я ожидал бы, что изменение маршрутов не приведет к повторной визуализации компонента MyHeader, поскольку ничего не меняется.Однако я все еще увижу основной момент с инструментами разработки.Я предполагаю, что это ожидаемо, поскольку все примеры в Документах демонстрируют одинаковое поведение.

Мой вопрос двоякий.1) Какова реальная причина повторного рендеринга компонента, подобного MyHeader?Не похоже, что какие-либо реквизиты или состояние меняются.Это из-за того, как маршрутизатор использует Context API?Маршрутизатор рендерит и заставляет детей перерисовывать?2) Почему это не считается расточительным?Кажется, что даже при том, что фактическое DOM не меняется, React все равно придется пройти этапы согласования в виртуальном DOM.Это так быстро, это не важно?Что происходит, когда вы начинаете иметь тонны вложенных компонентов?

1 Ответ

0 голосов
/ 05 июня 2018

Да, это и есть участок земли.

Ваши компоненты будут перерисованы, если они не React.PureComponent или иным образом не определят shouldComponentUpdate(), когда родительский компонент повторно отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...