Components
Базові будівельні блоки React. Функціональні компоненти з підтримкою JSX дозволяють розбити UI на незалежні, перевикористовувані частини з чітким інтерфейсом props.
Інформативна сторінка-лабораторія про те, як працює React: компонентний підхід, хуки, керування станом, та Next.js — фреймворк для SSR/SSG з оптимізацією продуктивності.
React — декларативна бібліотека для побудови користувацьких інтерфейсів. Next.js додає можливості серверного рендерингу, статичної генерації та fullstack API-роутів.
Базові будівельні блоки React. Функціональні компоненти з підтримкою JSX дозволяють розбити UI на незалежні, перевикористовувані частини з чітким інтерфейсом props.
useState, useEffect, useContext та кастомні хуки дають можливість керувати станом та побічними ефектами без класів. Контекст забезпечує глобальний доступ до даних.
Next.js пропонує Server-Side Rendering (SSR) для динамічних даних, Static Site Generation (SSG) для швидких сторінок, та Incremental Static Regeneration (ISR) для оновлення.
React використовує Virtual DOM для ефективного оновлення UI. Процес включає створення елементів, порівняння з попереднім станом (diffing) та мінімальні зміни в реальному DOM.
React порівнює новий Virtual DOM з попереднім снепшотом, знаходить мінімальний набір змін та застосовує їх до реального DOM. Алгоритм O(n) базується на двох припущеннях: різні типи елементів дають різні дерева, та ключі (keys) вказують на стабільні елементи.
React 16+ використовує Fiber — новий алгоритм реконсиляції з підтримкою інкрементального рендерингу. Це дозволяє розбивати роботу на частини, встановлювати пріоритети та реалізувати Concurrent Mode для плавного UX.
Блок нижче моделює вплив різних параметрів React-застосунку на продуктивність. Спостерігайте, як змінюється час рендерингу та використання пам'яті.
Типова організація: React-компоненти з хуками для UI-логіки та Next.js API routes для бекенд-функціональності в одному проєкті.
import { useState, useEffect } from 'react';
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchUser = async () => {
const res = await fetch(`/api/users/${userId}`);
const data = await res.json();
setUser(data);
setLoading(false);
};
fetchUser();
}, [userId]);
if (loading) return <div>Loading...</div>;
return (
<div className="profile">
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
}
// pages/api/users/[id].ts — Next.js API Route
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { id } = req.query;
if (req.method === 'GET') {
try {
const user = await db.getUserById(id);
if (!user) {
return res.status(404).json({
error: 'User not found'
});
}
res.status(200).json(user);
} catch (error) {
res.status(500).json({
error: 'Server error'
});
}
}
}
Кожен фреймворк має свої сильні сторони. React домінує в екосистемі завдяки гнучкості, Vue пропонує простоту, Angular — повноцінне рішення для enterprise, Svelte — компіляцію без VDOM.
| Фреймворк | Рендеринг | Розмір (gzip) | Крива навчання | Екосистема | Найкраще для |
|---|---|---|---|---|---|
| React | Virtual DOM | ~42 KB | Середня | Найбільша | SPA, складні UI |
| Vue | Virtual DOM | ~34 KB | Низька | Велика | Швидка розробка |
| Angular | Real DOM + Change Detection | ~130 KB | Висока | Повноцінна | Enterprise apps |
| Svelte | Compile-time (no VDOM) | ~5 KB | Низька | Зростає | Швидкі, легкі apps |
HTML/CSS/JS, базовий React, робота з API, Git.
TypeScript, Next.js, state management (Redux/Zustand), тестування.
Архітектура, performance optimization, CI/CD, менторинг команди.
Технологічна стратегія, масштабування систем, вплив на продукт.
React — це бібліотека для побудови UI, яка фокусується на компонентному підході. Next.js — це фреймворк, побудований на React, який додає серверний рендеринг (SSR), статичну генерацію (SSG), API-роути та багато оптимізацій "з коробки".
useEffect потрібен для побічних ефектів: запити до API, підписки на події, маніпуляції з DOM. У React 18+ краще використовувати useEffect для синхронізації з зовнішніми системами, а для обчислень — useMemo.
Hydration — процес "оживлення" статичного HTML, згенерованого на сервері, шляхом прикріплення JavaScript-обробників подій. Це дозволяє отримати швидкий перший рендер + інтерактивність після завантаження JS.
Основні техніки: React.memo для компонентів, useMemo/useCallback для важких обчислень, lazy loading з React.lazy та Suspense, code splitting, оптимізація зображень, та використання Production build.
SSG підходить для контенту, який рідко змінюється (блоги, документація). SSR краще для динамічних даних, які залежать від запиту (особисті кабінети, пошук). ISR дозволяє комбінувати обидва підходи.
Для малих застосунків — useState + Context. Для середніх — Zustand або Redux Toolkit. Для складних з кешуванням — TanStack Query (React Query) або SWR для серверного стану.
Синтаксичне розширення JavaScript, яке дозволяє писати HTML-подібний код в JavaScript. JSX компілюється у виклики React.createElement().
Легка копія реального DOM в пам'яті. React використовує його для ефективного порівняння змін та мінімізації операцій з реальним DOM.
Процес перетворення серверно-згенерованого HTML в інтерактивний React-застосунок шляхом прикріплення обробників подій та стану.
Властивості компонентів, які передаються від батьківського до дочірнього компонента. Props незмінні (immutable) всередині компонента.
React Hook для виконання побічних ефектів: запити до API, підписки, маніпуляції DOM. Викликається після рендеру компонента.
Incremental Static Regeneration — можливість Next.js оновлювати статичні сторінки в фоновому режимі без повної перебудови сайту.