Пошук уроків, статей та іншого контенту
Вбудовуватимете JavaScript-вирази в JSX і відображатимете динамічні значення в інтерфейсі.
JSX дає змогу поєднувати розмітку інтерфейсу з JavaScript. Щоб вставити JavaScript-вираз у JSX, використовуйте фігурні дужки {}:
<h1>{вираз}</h1>Усередині дужок React обчислює вираз і вставляє його результат у розмітку.
function App() {
const name = "Олена";
return <h1>Привіт, {name}!</h1>;
}На екрані буде:
Привіт, Олена!У JSX можна вставляти:
змінні;
рядки та числа;
арифметичні операції;
виклики функцій;
тернарні вирази;
властивості об'єктів;
результати методів масивів.
Значення змінної вставляється у JSX за її назвою:
function UserInfo() {
const firstName = "Марія";
const age = 25;
return (
<div>
<h2>{firstName}</h2>
<p>Вік: {age}</p>
</div>
);
}Змінні можна використовувати не лише як окремий текст, а й поєднувати зі звичайним текстом:
function Greeting() {
const name = "Андрій";
return <p>Доброго дня, {name}!</p>;
}Текст до і після виразу залишається звичайним текстом JSX, а значення в дужках обчислюється JavaScript.
У фігурних дужках можна виконувати прості операції:
function Product() {
const price = 120;
const quantity = 3;
return (
<div>
<p>Ціна одного товару: {price} грн</p>
<p>Кількість: {quantity}</p>
<p>Разом: {price * quantity} грн</p>
</div>
);
}Тут React обчислить вираз price * quantity і покаже результат:
Разом: 360 грнТакож можна використовувати конкатенацію рядків:
function Profile() {
const firstName = "Ірина";
const lastName = "Коваль";
return <h2>{firstName + " " + lastName}</h2>;
}Проте для складніших рядків зручніше використовувати шаблонні рядки:
function Profile() {
const firstName = "Ірина";
const lastName = "Коваль";
const fullName = `${firstName} ${lastName}`;
return <h2>{fullName}</h2>;
}У JSX можна викликати функцію та відображати її результат:
function formatPrice(price) {
return `${price} грн`;
}
function Product() {
const price = 250;
return <p>Вартість: {formatPrice(price)}</p>;
}Функція formatPrice повертає рядок, тому React може показати його в інтерфейсі.
Повний приклад:
import { createRoot } from "react-dom/client";
function formatPrice(price) {
return `${price.toFixed(2)} грн`;
}
function App() {
const productName = "Навушники";
const price = 1499;
const quantity = 2;
const total = price * quantity;
return (
<main>
<h1>Замовлення</h1>
<p>Товар: {productName}</p>
<p>Ціна: {formatPrice(price)}</p>
<p>Кількість: {quantity}</p>
<p>Сума: {formatPrice(total)}</p>
</main>
);
}
createRoot(document.getElementById("root")).render(<App />);У цьому прикладі JSX використовує:
значення змінних;
множення price * quantity;
виклик функції formatPrice;
властивість числа toFixed.
У фігурних дужках можна використовувати саме вирази — частини коду, які повертають значення.
Приклади виразів:
{name}
{price * quantity}
{formatPrice(price)}
{isOnline ? "Онлайн" : "Офлайн"}JavaScript-інструкції не можна безпосередньо вставити всередину JSX.
Наприклад, такий код неправильний:
// Помилка: if не є виразом
return <p>{if (isOnline) "Онлайн"}</p>;Для умов у JSX використовуйте тернарний оператор:
function Status() {
const isOnline = true;
return <p>{isOnline ? "Користувач онлайн" : "Користувач офлайн"}</p>;
}Тернарний оператор має такий вигляд:
умова ? значенняЯкщоТак : значенняЯкщоНіЯкщо логіка складніша, підготуйте значення до return:
function Status() {
const isOnline = true;
let message;
if (isOnline) {
message = "Користувач онлайн";
} else {
message = "Користувач офлайн";
}
return <p>{message}</p>;
}У цьому випадку if виконується як звичайний JavaScript до повернення JSX.
&&Оператор && зручно використовувати, коли елемент потрібно показати лише за певної умови:
function Notification() {
const hasNewMessages = true;
return (
<section>
<h2>Повідомлення</h2>
{hasNewMessages && <p>У вас є нові повідомлення</p>}
</section>
);
}Якщо hasNewMessages дорівнює true, React покаже абзац. Якщо значення false, абзац не буде відображений.
Інший приклад:
function UserPanel() {
const isAdmin = false;
return (
<div>
<h2>Панель користувача</h2>
{isAdmin && <button>Налаштування адміністратора</button>}
</div>
);
}Щоб відобразити значення з об'єкта, використовуйте крапковий запис:
function UserCard() {
const user = {
name: "Софія",
city: "Львів",
age: 28,
};
return (
<article>
<h2>{user.name}</h2>
<p>Місто: {user.city}</p>
<p>Вік: {user.age}</p>
</article>
);
}React вставить у JSX значення властивостей name, city та age.
React може відобразити в JSX:
рядки;
числа;
елементи JSX;
масиви елементів JSX;
null, undefined та false як відсутність виводу.
function Values() {
const title = "Заголовок";
const count = 10;
const nothing = null;
return (
<div>
<h2>{title}</h2>
<p>Кількість: {count}</p>
<p>{nothing}</p>
</div>
);
}Останній абзац не матиме видимого тексту, тому що null нічого не відображає.
Булеві значення також зазвичай використовують для умов, а не як текст:
function Example() {
const isReady = true;
return (
<div>
{isReady && <p>Готово</p>}
</div>
);
}Текст без фігурних дужок сприймається буквально:
function Example() {
const name = "Олена";
return (
<div>
<p>name</p>
<p>{name}</p>
</div>
);
}Результат:
перший абзац покаже name;
другий абзац покаже Олена.
Фігурні дужки повідомляють JSX, що всередині потрібно виконати JavaScript-вираз.
Якщо вираз стає довгим, краще обчислити його в змінній до return:
function OrderSummary() {
const price = 500;
const quantity = 4;
const discount = 100;
const total = price * quantity - discount;
return (
<section>
<h2>Підсумок замовлення</h2>
<p>Загальна сума: {total} грн</p>
</section>
);
}Такий код легше читати, ніж довгий вираз безпосередньо в JSX:
<p>Загальна сума: {price * quantity - discount} грн</p>Обидва варіанти працюють, але змінна total краще пояснює, що саме означає значення.
Неправильно:
function Greeting() {
const name = "Олена";
return <h1>Привіт, name!</h1>;
}React покаже текст Привіт, name!.
Правильно:
function Greeting() {
const name = "Олена";
return <h1>Привіт, {name}!</h1>;
}if безпосередньо в JSXНеправильно:
return <p>{if (isActive) "Активний"}</p>;Використовуйте тернарний оператор:
return <p>{isActive ? "Активний" : "Неактивний"}</p>;Або підготуйте значення до return.
Неправильно:
function User() {
const user = { name: "Олена" };
return <p>{user}</p>;
}Об'єкт потрібно відображати через конкретну властивість:
function User() {
const user = { name: "Олена" };
return <p>{user.name}</p>;
}Неправильно:
const name = "Іван";
return <p>{"name"}</p>;У лапках "name" — це звичайний рядок. Для використання змінної потрібні фігурні дужки без лапок:
return <p>{name}</p>;Створіть компонент BookCard, який відображає:
назву книги;
ім'я автора;
ціну;
кількість книг;
загальну вартість;
повідомлення "Є в наявності", якщо кількість більша за нуль.
Один із можливих варіантів:
function BookCard() {
const title = "Кобзар";
const author = "Тарас Шевченко";
const price = 300;
const quantity = 2;
const total = price * quantity;
return (
<article>
<h2>{title}</h2>
<p>Автор: {author}</p>
<p>Ціна: {price} грн</p>
<p>Кількість: {quantity}</p>
<p>Разом: {total} грн</p>
{quantity > 0 && <p>Є в наявності</p>}
</article>
);
}JavaScript-вирази вставляють у JSX за допомогою {}.
У JSX можна використовувати змінні, арифметичні операції, виклики функцій і властивості об'єктів.
Фігурні дужки відрізняють JavaScript-значення від звичайного тексту.
Інструкції на кшталт if не вставляють безпосередньо в JSX.
Для простих умов використовують тернарний оператор або &&.
Складні обчислення краще виконувати до return, зберігаючи результат у змінній.
Рядки, числа та JSX-елементи можуть відображатися в інтерфейсі, а null, undefined і false не створюють видимого тексту.