Элементы в React по сути описывают то, что вы хотели бы увидеть на экране. Например, такой элемент в React:
const element = <h1>Hello, friends</h1>;
Что отличает элементы React от элементов, отображаемых в DOM? Проще говоря, элементы React – это объекты, которые легко создавать в вычислительном отношении. Обновление DOM обрабатывается React DOM, который обеспечивает соответствие «виртуального DOM» элементам React. Сложный процесс выбора элемента в DOM, создания нового элемента, а затем добавления его в DOM, и код, участвующий в его выполнении, становится намного проще.
Чтобы начать рендеринг элементов в React, должен быть корневой узел DOM. Допустим, он существует в элементе div в html-файле:
<div id="root"></div>
Все содержимое корневого DOM-узла будет управляться React DOM. Если приложение создается с использованием только React, у вас будет только один корневой DOM-узел в приложении. Имеем это в виду и давайте допишем предыдущий код:
const element = <h1>Hello, friends</h1>;
ReactDOM.render(element, document.getElementById('root'));
Это приведет к успешному отображению «Hello, friends
» на экране. Теперь, что касается обновления элементов React, они являются «неизменяемыми», это означает, что после создания элемента его дочерние элементы и атрибуты не могут быть изменены. Связано с тем, что элемент React представляет пользовательский интерфейс только в определенный момент времени. При этом еще один способ, с помощью которого React делает рендеринг и обновление элементов более эффективным, заключается в том, что он обновляет только то, что необходимо. Давайте посмотрим на пример тикающих часов из официальной документации React:
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(element, document.getElementById('root'));
}
setInterval(tick, 1000);
ReactDOM.render вызывается каждую секунду из каллбэка setInterval(). Если на этот код посмотреть с помощью инструментов разработчика, вы увидите, как React сравнивает элементы и их дочерние элементы с предыдущим и обновляет только то, что необходимо. Вы увидите, что новый обновленный элемент <h2> не отображается каждый раз, а обновляется только часть элемента, отображающая новое время.