Skip to main content

Що таке рендеринг (rendering) в React?

Рендеринг (rendering) в React - це процес, при якому React створює і оновлює дерево UI-елементів (Virtual DOM) на основі стану (state) і властивостей (props) компонентів, а потім синхронізує його з реальним DOM браузера.


Простіше кажучи:

Коли щось змінюється (наприклад, стан компонента), React:

  1. Викликає функцію компонента (або render() у класового компонента), щоб отримати нове дерево JSX-елементів.
  2. Порівнює нове дерево з попереднім (через алгоритм reconciliation).
  3. Визначає відмінності (diff) і мінімально оновлює DOM, щоб відобразити зміни на екрані.

Два ключові етапи рендерингу:

React 18 і вище використовують архітектуру Fiber, у якій процес ділиться на дві фази:

  1. Render phase (фаза обчислення / підготовки) React викликає компоненти, створює нове віртуальне дерево, порівнює його зі старим і вирішує, що потрібно оновити. Ця фаза може бути перервана (у concurrent rendering).
  2. Commit phase (фаза застосування) React застосовує всі знайдені зміни до реального DOM. На цьому етапі викликаються хуки на кшталт useLayoutEffect, useEffect.

Коли відбувається рендеринг:

Рендеринг компонента запускається, коли:

  • Змінюється його state (setState, useState).
  • Змінюються його props (батько передав нові дані).
  • Змінюється контекст (useContext).
  • Ререндериться батько (якщо дочірній компонент не мемоізований за допомогою React.memo).

Види рендерингу:

ТипЩо робитьПриклад
Initial renderПерше відображення компонентапід час завантаження сторінки
Re-renderПовторний рендер через оновлення стану або пропсівпри setState()
Server-side rendering (SSR)Генерація HTML на сервері (Next.js, Remix)покращує SEO
Static rendering (SSG)Генерація HTML під час збіркивикористовується в Next.js
Client-side rendering (CSR)Генерація інтерфейсу повністю в браузерістандартний React

Важливо:

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

Приклад:

javascript
function Counter() { const [count, setCount] = useState(0); console.log('Рендеринг!'); return ( <div> <p>Лічильник: {count}</p> <button onClick={() => setCount(count + 1)}>+</button> </div> ); }

Щоразу при натисканні кнопки:

  • Викликається setCount.
  • React ререндерить компонент (console.log спрацьовує).
  • React порівнює нове дерево з попереднім.
  • Змінює лише текст <p>Лічильник: ...> у DOM.

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

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

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