Створення складного веб-додатку на “чистому” JavaScript (Vanilla JS), маніпулюючи DOM-елементами вручну через document.querySelector і перемальовуючи їх при кожній зміні даних — це важке, схильне до помилок і майже неможливе завдання для великих команд. Код швидко перетворюється на некеровану “спагетті-архітектуру”.
Щоб вирішити цю проблему, інженери компанії Meta (колишній Facebook) у 2013 році випустили бібліотеку React. Вона кардинально змінила спосіб мислення розробників. Замість того, щоб думати “як змінити цей абзац на сторінці”, React запропонував підхід: “ось мої дані, React, сам намалюй інтерфейс так, щоб він відповідав цим даним”.
Сьогодні React — це абсолютний лідер на ринку фронтенд-технологій. Знання React є обов’язковою вимогою для 80% вакансій Frontend-розробників у світі.
Мета цієї лекції — зрозуміти фундаментальну філософію React (компонентність та декларативність), дізнатися, що таке SPA, і зазирнути під капот магії Virtual DOM.
Протягом довгого часу стандартом розробки була бібліотека jQuery. Вона спрощувала пошук елементів і анімації, але підхід залишався імперативним: розробник повинен був вручну керувати кожною зміною на сторінці.
Зі зростанням складності веб-додатків (поява Gmail, Facebook, де сторінки більше не перезавантажувалися після кожного кліку), виникла потреба в надійній архітектурі. Почалася ера MVC (Model-View-Controller) фреймворків на кшталт AngularJS та Backbone. Проте з часом і вони виявилися надто громіздкими або повільними через масове оновлення справжнього DOM.
І тоді з’явився React, який сказав: “Давайте розіб’ємо весь інтерфейс на незалежні шматочки (компоненти), і дозволимо їм самим вирішувати, як вони виглядають залежно від поточних даних”.
Рекламний слоган на офіційному сайті каже: “React — це бібліотека для створення користувацьких інтерфейсів”.
Зверніть увагу на слово бібліотека. React — це не фреймворк (як Angular).
До появи SPA Інтернет працював за моделлю Многосторінкових додатків (MPA).
Як це було: ви клікаєте на посилання “Про нас” -> екран на мить біліє -> браузер повністю завантажує з сервера нову HTML-сторінку (about.html). Це повільно і неекономно, бо шапка сайту (Header) і підвал сайту (Footer) завантажуються щоразу наново, хоча вони не змінилися.
Single Page Application (SPA) — це додаток, у якому є лише один фізичний HTML-файл (index.html). Цей файл на 100% порожній (містить тільки <div id="root"></div>).
Коли ви заходите на SPA-сайт:
bundle.js (весь ваш скомпільований React додаток).#root порожнього HTML.Майже всі сучасні веб-додатки (Instagram, Netflix, Spotify Web) написані як SPA через їхню неймовірну швидкість роботи (вони відчуваються як десктопні або мобільні додатки, а не як звичайні сайти).
Замість того, щоб сприймати веб-сторінку як один величезний документ (як у класичному HTML), React пропонує сприймати її як набір конструктора Lego.
Компонент — це незалежний, ізольований шматок коду, який відповідає за свою власну розмітку (HTML), свої власні стилі (CSS) та свою власну поведінку (JS).
Наприклад, сторінку інтернет-магазину ми розбиваємо на:
<Header><Sidebar><ProductList> (який у свою чергу складається з 10 компонентів <ProductCard>)<Footer>Переваги:
<Button> один раз, ви можете використовувати його на тисячі різних сторінок сайту просто написавши <Button />, передаючи їй різні кольори.ProductCard.jsx, і це ніяк не зачепить інші частини сайту.index.html.React радикально змінює підхід до написання коду з імперативного на декларативний.
{ hasError: true }. У випадку помилки UI має бути червоним з текстом ‘Помилка’. Якщо ні - UI має бути зеленим.” (Ви не розказуєте як міняти DOM. Ви просто пов’язуєте візуальний стан із даними, а React сам подбає про застосування цих змін у DOM).Ваш код стає передбачуваним. UI в React — це завжди пряма функція від поточних даних (State).
UI = f(State)
Зміна реального DOM у браузері (наприклад, видалення дива і створення нового) — це найбільш ресурсомістка та повільна операція, яку тільки може робити веб-додаток (запускається перемальовка дерева CSS, перерахунок позицій Layout).
Якби React щоразу після кліку перемальовував весь справжній DOM, сайти б жахливо “гальмували”. Тому він використовує Virtual DOM (Віртуальний DOM).
Як це працює крок за кроком (Процес Реконсиляції):
<span> тегу).<span>). Все інше на сторінці лишається недоторканим.Ця магія робить React надзвичайно швидким.
Оскільки сучасний React-додаток пишеться в компонентному стилі, з використанням модулів і нового синтаксису (JSX), код перед відправкою у браузер потрібно “зібрати” та трансформувати в зрозумілий для всіх браузерів звичайний bundle.js.
Тривалий час абсолютним стандартом для швидкого старту була утиліта від самих розробників React — CRA (Create React App). Вона була побудована на базі збірка Webpack. Але з часом вона стала надзвичайно повільною (проект міг запускатися 10-20 секунд). Сьогодні CRA офіційно визнана застарілою (Deprecated).
Сучасний стандарт — Vite. Vite (французькою — “швидкий”) — це нове покоління інструментів для фронтенд-озробки. Він запускає сервер розробки за долі секунди завдяки використанню нативних ES-модулів браузера, та здійснює гарячу заміну коду (HMR — Hot Module Replacement) майже миттєво. Саме Vite ми використовуватимемо на практичних заняттях для створення наших React-проектів.
<div id="root">.document.querySelector) є поганою практикою сьогодні?Create React App на користь інструментарію Vite?