Ось готовий урок, створений за твоїм майстер-промптом.
🎓 Урок: JSX — Як JavaScript і HTML стали одним цілим
Привіт, друзі! Радий вас бачити. 👋
Сьогодні ми не просто вивчимо новий синтаксис. Ми змінимо те, як ви уявляєте собі створення вебсторінок. Ми збираємось зруйнувати стіну між логікою (JavaScript) та візуалом (HTML).
Готові? Тоді поїхали! 🚀
1. 🔥 Вступ: Проблема та мотивація
Уявіть, що ви хочете побудувати будинок 🏠. У старі добрі часи веб-розробки (чистий JS) це виглядало так: ви телефонували на склад і казали: "Алло, дайте мені одну цеглину. Тепер покладіть її сюди. Тепер дайте вікно. Вставте його в стіну. А тепер пофарбуйте стіну."
У коді це виглядало приблизно так:
const div = document.createElement('div');
div.className = 'card';
const h1 = document.createElement('h1');
h1.textContent = 'Привіт!';
div.appendChild(h1);
document.body.appendChild(div);
Втомлює, правда? 😓
А тепер уявіть, що у вас складний інтерфейс, як Facebook чи Instagram. Скільки таких createElement і appendChild вам доведеться написати? Тисячі? Мільйони?
Риторичне питання:
Чи не було б круто, якби ми могли прямо всередині JavaScript сказати: "Ось мій HTML, просто покажи його", не граючись у конструктор LEGO по одній детальці?
Саме для цього і з'явився JSX. Це як магія, яка дозволяє писати розмітку прямо всередині коду логіки. Це не просто зручно — це революція у швидкості розробки.
2. 🧠 Теоретична база (Що під капотом?)
Що таке JSX? Офіційно: це розширення синтаксису для JavaScript (JavaScript XML). Простою мовою: це HTML, який живе всередині JavaScript.
⚙️ Як це працює "під капотом"? (Інтуїтивне розуміння)
Браузер не розуміє JSX. Якщо ви згодуєте йому <div /> всередині JS-файлу, він видасть помилку.
Тож як це працює? Тут в гру вступає транспайлер (наприклад, Babel). Уявіть його як перекладача. Ви пишете красивий JSX:
const element = <h1>Hello, World!</h1>;
Babel тихо перетворює це на той самий "нудний" JS, який розуміє браузер:
const element = React.createElement('h1', null, 'Hello, World!');
🔑 Що треба запам’ятати залізним правилом:
- Це JavaScript, а не рядок. Ми не ставимо лапки навколо HTML тегів.
- Один батьківський елемент. Функція не може повернути два окремих елементи, вона повертає одне "дерево". Потрібно все обгорнути в
<div>або<>...</>(Фрагмент). - CamelCase. Оскільки ми в JS, ми не пишемо
class(бо це зарезервоване слово), ми пишемоclassName. Неonclick, аonClick. - Магія фігурних дужок
{}. Все, що всередині{...}, сприймається як чистий JavaScript. Це портал з HTML назад у логіку.
3. 🧪 Приклади (від простого до реального)
Приклад №1: Найпростіший
Спробуймо вивести заголовок.
const element = <h1>Це JSX, дитинко!</h1>;
Очікування: У змінній element лежить об'єкт, який React потім перетворить на DOM-вузол. Все просто.
Приклад №2: Динамічні дані (Включаємо магію {})
А що, як ми хочемо привітати конкретного користувача?
Питання до вас: Як нам вставити змінну
nameвсередину тегу<h1>?
const name = "Олекса";
const element = <h1>Привіт, {name}!</h1>;
Результат: На екрані буде "Привіт, Олекса!".
Чому: Фігурні дужки {} кажуть JSX-у: "Зупинись на секунду, тут буде JavaScript-код, обчисли його і встав результат".
Приклад №3: Умови та логіка
Давайте ускладнимо. У нас є користувач, і ми хочемо показати йому кнопку "Вхід" або "Вихід" залежно від статусу.
const isLoggedIn = true;
const button = (
<button>
{isLoggedIn ? "Вийти" : "Увійти"}
</button>
);
Що ви очікуєте побачити? Оскільки
isLoggedInцеtrue, тернарний оператор поверне "Вийти". Кнопка матиме текст "Вийти".
Увага: Всередині {} можна писати тільки вирази (те, що повертає значення: змінні, функції, математику, тернарні оператори).
Там не можна писати if, while, for — бо це інструкції, а не вирази.
4. 🛠 Практична частина
Час забруднити руки кодом! Виконайте ці завдання подумки або у редакторі (CodeSandbox/VS Code).
🔹 Завдання 1: Hello User
Створіть константу userName зі своїм ім'ям та змінну element, яка містить <h2>, що каже "Ласкаво просимо, [Ім'я]".
🔹 Завдання 2: Математика в UI
Створіть JSX, який виводить параграф <p>, всередині якого пораховано суму 2 + 2.
Підказка: використовуйте {}.
🔹 Завдання 3: Виправте помилку
Новачок написав цей код і він не працює. Чому? Виправте його.
const content = (
<h1>Заголовок</h1>
<p>Текст під заголовком</p>
);
Підказка: скільки тут кореневих елементів?
🔹 Завдання 4: Стилізація
В HTML ми пишемо style="color: red;". В JSX стиль — це об'єкт.
Спробуйте створити <div> з червоним текстом.
// Допишіть код
const styleObj = { color: 'red', fontSize: '20px' };
const box = <div style={???}>Увага!</div>;
🔹 Міні-кейс: Картка товару
У вас є об'єкт:
const product = {
title: "iPhone 15",
price: 999,
isDiscount: true
};
Напишіть JSX-структуру, яка:
1. Виводить назву в <h3>.
2. Виводить ціну.
3. Якщо isDiscount дорівнює true, додає поруч з ціною текст "(Акція!)" червоного кольору.
5. 💡 Мислення як у розробника
Як думає досвідчений React-розробник, дивлячись на JSX?
- "UI — це функція від даних". Я не думаю, як змінити текст кнопки. Я думаю: "Яка змінна відповідає за цей текст?". Я змінюю змінну — JSX оновлюється сам.
- Помилка
[object Object]. Якщо ви бачите це на екрані, значить, ви спробували вивести цілий об'єкт всередині{}, а React не знає, як його показати. Виводьте конкретні властивості (user.name, а неuser). - Чистота коду. Якщо ваш JSX виглядає як суцільна математика та логіка — це поганий знак.
- Погано:
{x > 10 ? (y < 5 ? 'A' : 'B') : 'C'}(складно читати). - Добре: Винести логіку в окрему змінну перед
returnі вставити в JSX чисту змінну.
- Погано:
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? Ми взяли сухий JavaScript і "одягли" його в костюм HTML.
Тепер ви вмієте:
✅ Писати HTML-розмітку прямо в JS файлах.
✅ Вставляти динамічні дані через {}.
✅ Розуміти, що браузер насправді бачить React.createElement, а не HTML.
Що далі?
Зараз ми просто створювали змінні з JSX. Але що, якби ми могли створити свій власний тег? Наприклад, <MySuperButton />?
На наступному уроці ми розберемо Компоненти — цегляні блоки всього сучасного вебу.
Гарного кодингу, і побачимось на наступній лекції! 👋