Віртуальний DOM у React
Віртуальний DOM — це легка копія реального DOM, що зберігається в оперативній пам'яті.
React оновлює цю копію замість безпосередньої модифікації реального DOM, щоб уникнути виклику непотрібних "дорогих" операцій (layout, painting, reflow) у браузері.
Коли всі зміни внесені, React порівнює стару та нову версії Віртуального DOM (diffing) і точно оновлює реальний DOM (reconciliation).
Евристичний алгоритм O(n)
React застосовує ефективний алгоритм з двома ключовими припущеннями:
- Різні типи елементів → різні дерева
- Два елементи з різними типами створюють різні дерева. Порівнюючи два дерева, React спочатку порівнює два кореневі елементи. Коли кореневі елементи мають різні типи, React знищує старе дерево і будує нове з нуля.
- Якщо тип не змінюється, оновлюються лише змінені атрибути та дочірні вузли.
- Значення
keyдля дітей
- При зміщенні елементів у списку, ключі (
key) дозволяють React зрозуміти, які елементи залишилися, які були додані, а які видалені. - Це економить ресурси та зменшує повторні рендери.
Кроки оновлення (спрощено)
- Оновлення Віртуального DOM
React захоплює зміни (наприклад, виклик setState або useState).
- Diffing
React порівнює попередній Віртуальний DOM з новим, визначаючи відмінності.
- Reconciliation
- Тільки змінені частини реального DOM повторно рендеряться.
- Оновлення виконуються пакетами, а не після кожної дрібної зміни.
Ключові моменти
- Мінімізація роботи з реальним DOM: React мінімізує "дорогі" операції браузера.
- Інкапсуляція: Компоненти працюють зі своїм станом без ручного контролю за reflow/layout.
- Легке масштабування: Алгоритм дозволяє писати більш масштабований та підтримуваний код.
Важливий нюанс:
Якщо батьківський компонент рендериться, за замовчуванням його дочірні компоненти також повторно рендеряться, якщо не застосовуються додаткові оптимізації (React.memo, shouldComponentUpdate тощо).
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.