Skip to main content

Що таке reconciliation?

Визначення

Reconciliation (узгодження) - це процес порівняння старого і нового дерева Virtual DOM, у ході якого React визначає, які саме зміни потрібно внести в реальний DOM, щоб інтерфейс відповідав актуальному стану даних.


Як це працює (покроково)

  1. Ти змінюєш стан (state або props):
javascript
setCount(count + 1);
  1. React викликає повторний рендер компонента -> створюється нове дерево Virtual DOM.
  2. React порівнює нове і старе дерево Virtual DOM:
  • Якщо вузол того самого типу (<div> -> <div>), він зберігає DOM-елемент і оновлює лише змінені атрибути.
  • Якщо тип змінився (<div> -> <span>), React видаляє старий вузол і створює новий.
  • Якщо порядок елементів змінився (наприклад, у списку), React використовує ключі (key), щоб зрозуміти, який елемент перемістився, а який додано/видалено.
  1. Після порівняння React вносить мінімальні зміни в реальний DOM.

Приклад

Було:

javascript
<ul> <li>A</li> <li>B</li> <li>C</li> </ul>

Стало:

javascript
<ul> <li>A</li> <li>C</li> <li>D</li> </ul>

React робить:

  1. Порівнює обидва дерева Virtual DOM.
  2. Бачить, що:
  • A залишився на місці
  • B зник
  • C перемістився вгору
  • D додався
  1. Оновлює лише необхідні частини DOM, без повної перемальовки.

Алгоритм reconciliation

React використовує оптимізований "diffing algorithm", заснований на кількох евристиках:

  1. Різні типи елементів -> перерендер вузла
javascript
<div> -> <span> // замінюється повністю
  1. Однакові типи -> оновлення властивостей
javascript
<button disabled={false}> -> <button disabled={true}> // React просто змінить атрибут
  1. Списки і key Ключ допомагає React відрізняти елементи між рендерами:
javascript
{items.map(item => <li key={item.id}>{item.text}</li>)}

Без key React може помилково видаляти і створювати елементи заново, втрачаючи фокус, анімації і стан.


Навіщо потрібен reconciliation

Без цього процесу React не знав би, що саме потрібно змінити, і просто перемальовував би все дерево заново -> повільно й неефективно.

За допомогою reconciliation React:

  • працює швидко (мінімум змін у DOM),
  • залишається декларативним (ти описуєш "що", не думаючи "як"),
  • зберігає стани компонентів при часткових оновленнях.

Візуальна аналогія

Уяви, що React - це текстовий редактор:

  • У тебе є стара версія документа (старий Virtual DOM);
  • Ти вносиш правки (новий Virtual DOM);
  • React порівнює дві версії і вносить лише відмінності, замість того щоб передруковувати весь текст.

Підсумок

ТермінЩо означає
Virtual DOMКопія реального DOM у пам'яті
DiffingПорівняння старого і нового Virtual DOM
ReconciliationЗастосування різниці до реального DOM
KeyПідказка React, який елемент відповідає якому під час порівняння

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.