Когда компонент размонтируется?
Мое настоящее понимание заключается в том, что компонент монтируется на DOM, когда это необходимо для просмотра или когда маршрут требует этого компонента. Он также будет предоставлять свои дочерние компоненты. Означает ли это, что компонент будет размонтирован при посещении маршрута, который не имеет этого компонента, или всякий раз, когда вы посещаете какую-либо страницу, на которой не отображается элемент, создаваемый этим компонентом? Таким образом, компонент необходимо будет перемонтировать каждый раз, когда он появляется на DOM (вне изменений prop и state), правильно?
Ответы
Ответ 1
Во время Согласования VirtualDOM, если компонент существовал, но больше не будет, компонент считается отключенным и получает возможность очистить (через componentWillUnmount
).
Обратное верно во время согласования, если компонент не существует, но теперь он считается готовым к монтированию, и ему предоставляется возможность самим подготовить (constructor
/componentWillMount
)
При срыве дерева старые узлы DOM уничтожаются. Экземпляры компонентов получают компонентWillUnmount(). При создании нового дерева новые DOM-узлы вставляются в DOM. Экземпляры компонентов получают компонентWillMount(), а затем компонентDidMount(). Любое состояние, связанное со старым деревом, теряется.
https://facebook.github.io/react/docs/reconciliation.html
Эта страница хорошо стоит прочитать, если вы еще этого не сделали. Это также объясняет, почему key
очень важен для повторяющихся элементов.
Ответ 2
Я бы сказал, что компонентный монтируется на DOM только в том случае, если он используется через другой компонент, включая компонент Router. Не думайте о маршрутизаторах как о специальных элементах/вещах в React. Они похожи на другие компоненты, и они выполняют сопоставление между текущим URL-адресом и шаблонами, которые они должны решить, какой компонент должен быть представлен с помощью функции render()
маршрутизатора. Всякий раз, когда происходит изменение URL-адреса, маршрутизатор выбирает новый компонент для рендеринга и выполняет рендеринг с помощью функции render()
.
Ответ 3
Компонент будет монтироваться на DOM только тогда, когда он должен быть визуализирован. Если вы измените маршрут или обновите страницу, или вы хотите визуализировать ваш компонент в определенных событиях (например, onClick показать/скрыть компонент), то будет вызвана componentWillUnmount(), и компонент будет удален из DOM
Ответ 4
Если компонент нуждается в рендеринге, он должен быть установлен на DOM.
Если нет, но устанавливайте его раньше, если его следует размонтировать.