Ответ 1
React алгоритм согласования предполагает, что без какой-либо другой информации, если пользовательский компонент появляется в одном месте на последующих визуализаторах, это тот же компонент, что и раньше, поэтому повторно использует предыдущий экземпляр вместо создания нового.
Если вы должны были реализовать componentWillReceiveProps(nextProps)
, вы увидите, что вместо этого вызывается вызов.
Различные Node Типы
Очень маловероятно, что элемент
<Header>
будет генерировать DOM, который будет выглядеть так, как генерирует<Content>
. Вместо того чтобы проводить время, пытаясь сопоставить эти две структуры, React просто восстанавливает дерево с нуля.В качестве следствия, если есть элемент
<Header>
в том же положении в двух последовательных рендерах, вы ожидаете увидеть очень похожую структуру, и стоит изучить его.Пользовательские компоненты
Мы решили, что два пользовательских компонента одинаковы. Поскольку компоненты являются сдержанными, мы не можем просто использовать новый компонент и называть его днем. React берет все атрибуты из нового компонента и вызывает
component[Will/Did]ReceiveProps()
на предыдущем.Предыдущий компонент теперь работает. Вызывается его метод
render()
и алгоритм diff перезапускается с новым результатом и предыдущим результатом.
Если вы даете каждому компоненту уникальный key
prop, React может использовать изменение key
, чтобы сделать вывод, что компонент фактически был заменен и будет создавать новый с нуля, предоставляя ему полный жизненный цикл компонента.
renderContent() {
if (this.state.activeItem === 'Item 1') {
return (
<Content title="First" key="first" />
);
} else {
return (
<Content title="Second" key="second" />
);
}
}