Коротка відповідь
middleReact‑архітектура — це розділення коду на логічні, переиспользувані модулі: компоненти, контексти, хук‑пакети та state‑менеджери. Кожен компонент відповідає за один UI‑елемент і отримує дані через пропси або контекст, а бізнес‑логіка розміщується у кастомних хуках. Підключення API, роутинг і глобальний стан організовуються через окремі слої (service‑layer, store‑layer) і підключаються до UI через інжекцію залежностей або контексту.
Повне пояснення
Що це і навіщо
React‑архітектура — це спосіб організації коду, що забезпечує масштабованість, тестованість і повторне використання. Вона розділяє UI‑компоненти, бізнес‑логіку та доступ до даних.
Ключові принципи
- Компонентний підхід: кожен компонент відповідає за один UI‑елемент.
- Підвищена ізоляція: логіка розміщується у кастомних хуках або контекстах.
- Слой‑орієнтованість: service‑layer (API), store‑layer (Redux/Zustand) і UI‑слой.
- Інжекція залежностей: пропси, контекст або hooks‑пакети.
Як це працює
- UI‑компоненти отримують дані через пропси або контекст.
- Кастомні хуки обробляють бізнес‑логіку, підключаються до API через service‑layer.
- State‑менеджер (Redux, Zustand) зберігає глобальний стан і надає його через контекст або hooks.
- Роутинг (React Router, Next.js) керує навігацією.
Практика і реалізація
// service/api.ts
export const fetchUsers = async () => {
const res = await fetch('/api/users');
return res.json();
};
// hooks/useUsers.ts
import { useEffect, useState } from 'react';
import { fetchUsers } from '../service/api';
export const useUsers = () => {
const [users, setUsers] = useState([]);
useEffect(() => {
fetchUsers().then(setUsers);
}, []);
return users;
};
// components/UserList.tsx
import { useUsers } from '../hooks/useUsers';
export const UserList = () => {
const users = useUsers();
return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
};
Тестування
- Unit: Jest + React Testing Library для компонентів.
- Integration: Vitest з mock‑API (msw).
- E2E: Playwright для роутів і взаємодії.
Дизайн‑рішення
- Контекст для глобальних налаштувань (theme, auth).
- Redux Toolkit або Zustand для простого глобального стану.
- React Query для кешування API‑запитів.
Оптимізація
- React.memo і
useMemo/useCallbackдля запобігання зайвим рендером. - Code‑splitting через
React.lazyіSuspense. - SSR/SSG з Next.js для SEO та швидкого завантаження.
Безпека
- Валідація даних на сервері, не довіряти пропсам.
- Захист CSRF/CSRF‑token у cookie.
- Обмеження CORS на бекенді.
Переваги
- Чітка розподіл відповідальностей.
- Легко масштабувати, додаючи нові компоненти чи хуки.
- Підтримує CI/CD і автоматизоване тестування.