nmk

Лекції (36 годин):

Змістовний модуль 1. Основи декларативного програмування та екосистема розробки

1 Еволюція веб-технологій та місце React у сучасній розробці (Лекція 1. 2 години)

Перша лекція присвячена аналізу переходу від статичного HTML до динамічних веб-інтерфейсів. Розглядається концепція Single Page Application (SPA) та порівняння імперативного підходу (DOM API) з декларативним, який пропонує React. Важливим аспектом є розуміння того, що React не є фреймворком у класичному розумінні, а бібліотекою, яка фокусується на рівні представлення (View). Обговорюється історія створення бібліотеки компанією Facebook та її вплив на індустрію через впровадження компонентно-орієнтованої архітектури.

2 Механізми роботи React: Virtual DOM та Reconciliation (Лекція 2. 2 години)

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

3 Середовище розробки та сучасний інструментарій (Tooling) (Лекція 3. 2 години)

Аналіз екосистеми Node.js, менеджерів пакетів (npm, yarn, pnpm) та систем збірки. Особлива увага приділяється Vite як сучасному стандарту, що замінив Create React App, завдяки використанню Native ESM та швидкій гарячій заміні модулів (HMR). Студенти вивчають роль Babel у трансляції сучасного JavaScript (ES6+) та SWC як високопродуктивної альтернативи.

4 JSX: Синтаксис, обмеження та можливості (Лекція 4. 2 години)

Вивчення JavaScript XML (JSX) як синтаксичного розширення, що дозволяє описувати структуру інтерфейсу всередині JavaScript-коду. Розглядається процес перетворення JSX у виклики React.createElement, правила вкладеності, використання виразів у фігурних дужках та відмінності між атрибутами HTML та пропсами JSX (наприклад, className замість class).

Змістовний модуль 2. Компонентна модель та керування станом

5 Функціональні компоненти та пропси (Props) (Лекція 5. 2 години)

Перехід від класових компонентів до функціональних як сучасного стандарту розробки. Розглядається концепція “чистих функцій” у контексті компонентів. Вивчення механізму передачі даних через пропси, їх незмінності (read-only) та односпрямованого потоку даних (one-way data flow), що є ключовим для передбачуваності стану додатка.

6 Хук useState: Робота з локальним станом (Лекція 6. 2 години)

Введення в систему хуків React. Детальне вивчення useState: синтаксис, ініціалізація та асинхронна природа оновлення стану. Обговорюється проблема пакетного оновлення (batching) та правила використання хуків (Rules of Hooks), такі як виклик тільки на верхньому рівні функцій.

7 Обробка подій та робота з формами (Лекція 7. 2 години)

Вивчення системи синтетичних подій (Synthetic Events), які забезпечують кросбраузерну сумісність. Порівняння керованих (controlled) та некерованих (uncontrolled) компонентів форм. Розглядається використання useRef для доступу до DOM-елементів у специфічних сценаріях, таких як інтеграція зі сторонніми бібліотеками.

8 Життєвий цикл та хук useEffect (Лекція 8. 2 години)

Аналіз етапів життєвого циклу компонента: монтування, оновлення та розмонтування. Вивчення хука useEffect як універсального інструменту для роботи з побічними ефектами (side effects), такими як мережеві запити, підписки або маніпуляції з таймерами. Розглядається масив залежностей та функція очищення (cleanup function) для запобігання витоку пам’яті.

9 Списки, ключі та умовний рендеринг (Лекція 9. 2 години)

Методи ітерації по масивах даних для генерації списків компонентів. Важливість атрибута key для алгоритму дифінгу React та наслідки використання індексів масиву як ключів. Розглядаються патерни умовного рендерингу за допомогою логічних операторів (&&) та тернарних операторів для створення гнучких інтерфейсів.

Змістовний модуль 3. Просунуті концепції та архітектурні патерни

10 Оптимізація продуктивності: useMemo та useCallback (Лекція 10. 2 години)

Вивчення механізмів мемоїзації для запобігання зайвим обчисленням та рендерингам. Аналіз випадків, коли використання цих хуків є виправданим, а коли — надлишковим. Розглядається React.memo як засіб поверхневого порівняння пропсів для компонентів.

11 Глобальне керування станом: Context API (Лекція 11. 2 години)

Вирішення проблеми “prop drilling” (прокидання пропсів через багато рівнів). Створення контексту, використання Provider та хука useContext. Обговорюються обмеження контексту в контексті частого оновлення даних та сценарії, коли варто використовувати зовнішні бібліотеки керування станом, такі як Redux або Zustand.

Завдання до лекції 11 Практичне завдання до Лекції №11: Глобальне керування станом

Навчитися аналізувати архітектуру власного React-додатку, виявляти недоліки односпрямованого потоку даних (Prop Drilling) та обґрунтовано обирати інструменти для глобального керування станом.

12 Маршрутизація у SPA: React Router (Лекція 12. 2 години)

Концепція клієнтської маршрутизації. Налаштування BrowserRouter, Routes та Route. Вивчення динамічних параметрів шляху (useParams), вкладених маршрутів (nested routes) та програмної навігації (useNavigate).

13 Взаємодія з API та асинхронність (Лекція 13. 2 години)

Методи отримання даних з сервера за допомогою fetch та axios. Обробка станів завантаження (loading) та помилок (error). Патерни інтеграції API запитів у хук useEffect та створення кастомних хуків для фетчингу даних.

14 TypeScript у React: Типізація для надійності (Лекція 14. 2 години)

Впровадження TypeScript у розробку React-додатків. Типізація пропсів, станів, подій та рефів. Переваги статичної типізації для великих команд та проєктів, що корелює з вимогами до якості ПЗ у комп’ютерних науках.

Змістовний модуль 4. Сучасна екосистема та професійні стандарти

15 Тестування React-додатків (Лекція 15. 2 години)

Важливість тестування для забезпечення стабільності систем. Вивчення Jest та React Testing Library для тестування компонентів з точки зору користувача. Огляд інструментів для наскрізного тестування (Playwright, Cypress) та їх роль у CI/CD процесах.

16 Стилізація та дизайн-системи (Лекція 16. 2 години)

Огляд підходів до стилізації: CSS Modules, CSS-in-JS (Styled Components) та Utility-first CSS (Tailwind CSS). Розглядається роль бібліотек компонентів, таких як Material UI або Ant Design, у прискоренні розробки корпоративних систем.

17 Next.js та Server-Side Rendering (SSR) (Лекція 17. 2 години)

Огляд фреймворку Next.js як розширення можливостей React. Порівняння стратегій рендерингу: Static Site Generation (SSG), Server-Side Rendering (SSR) та Incremental Static Regeneration (ISR). Вивчення концепції React Server Components (RSC) як майбутнього веб-розробки.

18 Деплоймент, безпека та етика розробки (Лекція 18. 2 години)

Процес розгортання додатків на платформах Vercel, Netlify або AWS. Розглядаються питання безпеки (XSS, CSRF) та етичні аспекти використання ШІ (GitHub Copilot, ChatGPT) у процесі написання коду, що є актуальним згідно з опитуваннями 2024 року.

Практичні заняття (18 годин):

1 Налаштування оточення та робота з Git (Практичне заняття 1. 2 години)

На практиці студенти ініціалізують проєкти, налаштовують ESLint та Prettier, а також відпрацьовують флоу роботи з гілками в Git.

2 Трансформація масивів даних (Практичне заняття 2. 2 години)

Відпрацювання методів map, filter та reduce для підготовки даних до відображення в React-компонентах.

3 Логіка умовного відображення (Практичне заняття 3. 2 години)

Створення складних інтерфейсів, що змінюються залежно від стану (наприклад, багаторівневі меню або таби).

4 Валідація введених даних (Практичне заняття 4. 2 години)

Реалізація кастомної логіки валідації для форм без використання зовнішніх бібліотек для глибокого розуміння процесів.

5 Побудова ієрархії компонентів (Практичне заняття 5. 2 години)

Практична задача з декомпозиції складного макета на дрібні, перевикористовувані модулі.

6 Налагодження коду (Debugging) (Практичне заняття 6. 2 години)

Використання React DevTools та точок зупинки (breakpoints) у браузері для пошуку помилок у стані та пропсах.

7 Робота з URL-параметрами (Практичне заняття 7. 2 години)

Створення динамічних посилань та обробка фільтрів пошуку через Query String.

8 Абстракція бізнес-логіки (Практичне заняття 8. 2 години)

Створення кастомних хуків для повторного використання логіки (наприклад, хук для визначення розміру вікна або стану онлайн/офлайн).

9 Аналіз продуктивності (Практичне заняття 9. 2 години)

Використання панелі Profiler у React DevTools для ідентифікації “важких” компонентів та їх оптимізації.

Лабораторні заняття (18 годин):

1. Створення каркаса додатка та базових UI-компонентів (Лабораторне заняття 1. 2 години)

Використання атомарного дизайну для створення кнопок, інпутів та карток.

2. Реалізація стрічки новин або списку об’єктів (Лабораторне заняття 2. 2 години)

Робота з реальними даними, впровадження списків та ключів.  Мета: Реалізувати компонент “Стрічка новин” (News Feed) або “Список товарів”, використовуючи масив об’єктів (JSON). Навчитися використовувати метод map() для генерації інтерфейсу та зрозуміти важливість пропа key для алгоритму Reconciliation.

3. Інтеграція системи фільтрації та пошуку (Лабораторне заняття 3. 2 години)

Робота з локальним станом для забезпечення миттєвого відгуку інтерфейсу на дії користувача.

4. Розробка багатосторінкової навігації (Лабораторне заняття 4. 2 години)

Впровадження React Router та створення сторінок профілю та налаштувань.

5. Створення системи автентифікації (Лабораторне заняття 5. 2 години)

Реалізація форм входу/реєстрації та захищених маршрутів (Protected Routes) за допомогою Context API.

6. Підключення до зовнішнього API (Лабораторне заняття 6. 2 години)

Використання JSONPlaceholder або власного бекенду для синхронізації даних додатку.

7. Впровадження TypeScript (Лабораторне заняття 7. 2 години)

Повний рефакторинг коду лабораторних робіт з додаванням типізації для підвищення надійності системи.

8. Написання тестів (Лабораторне заняття 8. 2 години)

Покриття основних функцій додатку (наприклад, додавання коментаря або зміна профілю) юніт-тестами.

9. Фінальна збірка та деплоймент (Лабораторне заняття 9. 2 години)

Оптимізація бандлу та розміщення проєкту в мережі Інтернет з налаштуванням CI/CD пайплайну.

Самостійна робота (48 годин)

1. Дослідження екосистеми Next.js (10 годин).

Самостійне вивчення App Router, Server Actions та методів оптимізації зображень.

2. Опанування інструментів тестування (8 годин).

Глибоке занурення в інтеграційне тестування та мокінг API за допомогою MSW (Mock Service Worker).

3. Вивчення State Management бібліотек (8 годин).

Порівняльний аналіз Redux Toolkit та Zustand. Реалізація невеликого модуля з використанням однієї з бібліотек.

4. Розробка власного кастомного хука для складних задач (6 годин).

Наприклад, хук для роботи з WebSockets або IndexedDB.

5. Підготовка до захисту проєкту (16 годин).

Написання документації, підготовка презентації та проведення фінального тестування розробленого додатка.