PassFront
  1. PassFront
  2. База знаний
  3. Рендеринг и производительность

Зачем нужен Virtual DOM в React?

Рендеринг и производительность

Virtual DOM нужен React, чтобы совместить две вещи, которые конфликтуют между собой: декларативный код («опиши, как UI выглядит») и эффективные обновления («меняй в DOM минимум»).

Проблема, которую он решает

Декларативная модель в лоб означала бы: на каждое изменение состояния стереть DOM и построить заново — корректно, но недопустимо дорого (плюс потеря фокуса, выделения, скролла). Императивная альтернатива — вручную обновлять нужные узлы — быстра, но в большом приложении превращается в неподдерживаемую сеть зависимостей «данные → куски DOM».

Как Virtual DOM снимает конфликт

setState
  → компоненты возвращают НОВОЕ полное описание UI (дёшево: JS-объекты)
  → React сравнивает его с прошлым описанием (diffing)
  → к реальному DOM применяется только разница (commit)

Разработчик пишет так, будто UI пересоздаётся целиком; React обеспечивает, что физически обновляется минимум.

Дополнительные выгоды

  • Батчинг: правки DOM применяются пакетом — меньше reflow.
  • Сохранение состояния DOM: фокус и ввод не теряются, потому что узлы переиспользуются, а не пересоздаются.
  • Абстракция от платформы: то же дерево рендерится в HTML на сервере или в нативные компоненты (React Native).
  • Прерываемость: работа над виртуальным деревом — обычные вычисления, их можно приостанавливать и приоритизировать (Fiber, React 18).

Коротко для собеседования

Virtual DOM позволяет писать декларативно («UI = функция состояния»), не платя за полное пересоздание DOM: React строит новое виртуальное дерево, сравнивает со старым и вносит в реальный DOM только разницу, батчируя правки. Бонусы — сохранение фокуса/состояния узлов, платформонезависимость и прерываемый рендеринг.

Другие вопросы раздела