Я проверяю реагирует на сверку . В нем говорится, что при обходе дочерних элементов React будет выполнять итерацию по обоим спискам дочерних элементов одновременно и генерировать мутацию при наличии различий.
Я сделал простой пример:
class ComponentA extends React.Component {
state = {
first: true
}
clickHandler = () => {
this.setState({
first: !this.state.first
})
}
render() {
return (
<div className='top'>
{this.state.first ? <span>xyz</span> : undefined}
<div>abc</div>
<div>efg</div>
<button onClick={this.clickHandler}>click me</button>
</div>)
}
}
При нажатии первый дочерний элемент (элемент span) будет входить и выходить из списка дочерних элементов. С точки зрения React, повторяя одну за другой, все должно выглядеть так, как будто все элементы изменились. Поэтому React должен повторно обработать DOM для всех этих 4 дочерних элементов (включая кнопку).
Но, проверяя инспектор DOM в Firefox и Chrome, я вижу выделение только на элементе span , а не на всех четырех, то есть DOM сохраняется для трех неизмененных элементов. Почему?
(выделение не видно на этом изображении, но элемент span подсвечивается при нажатии кнопки)