--- sidebar_position: 2 --- # Виртуальный DOM Механизм работы **Virtual DOM** и **Reconciliation** — это ключевые особенности React, которые делают его быстрым и эффективным для обновления пользовательских интерфейсов. Давайте разберём, как это работает. ## Virtual DOM (Виртуальный DOM) ### Что такое Virtual DOM? Virtual DOM — это легковесная копия реального DOM (Document Object Model). Это JavaScript-объект, который представляет структуру HTML-документа. В React Virtual DOM используется для оптимизации обновлений интерфейса. ### Как это работает? 1. **Создание Virtual DOM:** - Когда вы создаёте компоненты в React, они не напрямую взаимодействуют с реальным DOM. Вместо этого React создаёт Virtual DOM — JavaScript-представление структуры вашего интерфейса. 2. **Рендеринг Virtual DOM:** - При первом рендере React создаёт Virtual DOM на основе JSX и отображает его в реальный DOM. 3. **Обновление Virtual DOM:** - Когда состояние (state) или пропсы (props) компонента изменяются, React создаёт **новый Virtual DOM** (на основе обновлённых данных). 4. **Сравнение Virtual DOM:** - React сравнивает новый Virtual DOM с предыдущим (этот процесс называется **Reconciliation** или "согласование"). - React определяет, какие части Virtual DOM изменились. 5. **Обновление реального DOM:** - React вносит минимально необходимые изменения в реальный DOM, чтобы он соответствовал новому Virtual DOM. Это позволяет избежать полного перерисовывания страницы. ## Reconciliation (Согласование) ### Что такое Reconciliation? Reconciliation — это процесс сравнения старого и нового Virtual DOM для определения минимального набора изменений, которые нужно применить к реальному DOM. Этот процесс делает React эффективным, так как обновляется только то, что действительно изменилось. ### Как это работает? 1. **Diff-алгоритм:** - React использует алгоритм сравнения (Diffing Algorithm), чтобы определить различия между старым и новым Virtual DOM. - Алгоритм работает на основе следующих правил: - Элементы разных типов: Если тип элемента изменился (например, **`