React JSX
Що таке JSX?
JSX розшифровується як JavaScript XML.
JSX дозволяє нам писати HTML у React.
JSX полегшує написання та додавання HTML у React.
Кодування JSX
JSX дозволяє нам писати елементи HTML у JavaScript і розміщувати їх у DOM без жодного методу createElement()
та/або appendChild()
.
JSX перетворює теги HTML на елементи React.
Ви не зобов’язані використовувати JSX, але JSX полегшує написання програм React.
Ось два приклади. Перший використовує JSX, а другий – ні:
Приклад 1
Із JSX:
const myElement = <h1>I Love JSX!</h1>;
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(myElement);
Приклад 2
Без JSX:
const myElement = React.createElement('h1', {}, 'Я не використовую JSX!');
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(myElement);
Як ви бачите в першому прикладі, JSX дозволяє нам писати HTML безпосередньо в коді JavaScript.
JSX є розширенням мови JavaScript на основі ES6 і перекладається на звичайний JavaScript під час виконання.
Вирази в JSX
За допомогою JSX ви можете писати вирази у фігурних дужках { }
.
Вираз може бути змінною React, властивістю або будь-яким іншим дійсним виразом JavaScript. JSX виконає вираз і поверне результат:
Приклад
Виконати вираз 5 + 5
:
const myElement = <h1>React у {5 + 5} разів краще із JSX</h1>;
Вставлення великого блоку HTML
Щоб написати HTML у кілька рядків, помістіть HTML у круглі дужки:
Приклад
Створіть список із трьох елементів списку:
const myElement = (
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Cherries</li>
</ul>
);
Один елемент верхнього рівня
HTML-код має бути загорнутий в ОДИН елемент верхнього рівня.
Отже, якщо ви хочете написати два параграфи, ви повинні помістити їх у батьківський елемент, як-от елемент div
.
Приклад
Перенесіть два параграфи в один елемент DIV:
const myElement = (
<div>
<p>Я параграф.</p>
<p>Я також параграф.</p>
</div>
);
JSX видасть помилку, якщо HTML неправильний або якщо в HTML відсутній батьківський елемент.
Крім того, ви можете використати "фрагмент", щоб обернути кілька рядків. Це дозволить уникнути непотрібного додавання додаткових вузлів до DOM.
Фрагмент виглядає як порожній тег HTML: <></>
.
Приклад
Перенесіть два параграфи всередину фрагмента:
const myElement = (
<>
<p>Я параграф.</p>
<p>Я теж параграф.</p>
</>
);
Елементи мають бути закриті
JSX відповідає правилам XML, тому елементи HTML мають бути належним чином закриті.
Приклад
Закрийте порожні елементи за допомогою />
const myElement = <input type="text" />;
JSX видасть помилку, якщо HTML закрито неправильно.
Атрибут class = className
Атрибут class
є часто використовуваним атрибутом у HTML, але оскільки JSX відображається як JavaScript, і ключове слово class
є зарезервованим словом у JavaScript, вам не дозволено використовувати його в JSX.
Використовуйте замість цього атрибут className
.
JSX вирішив цю проблему, використовуючи натомість className
. Коли JSX відтворюється, він перетворює атрибути className
в атрибути class
.
Приклад
Використовуйте атрибут className
замість class
у JSX:
const myElement = <h1 className="myclass">Hello World</h1>;
Умови - інструкції if
React підтримує інструкції if
, але не всерединіJSX.
Щоб мати можливість використовувати умовні оператори в JSX, ви повинні розмістити інструкції if
за межами JSX, або ви можете використовувати замість них тернарний (потрійний) вираз:
Варіант 1:
Напишіть інструкції if
поза кодом JSX:
Приклад
Напишіть "Hello" якщо x
менше, ніж 10, інакше "Goodbye":
const x = 5;
let text = "Goodbye";
if (x < 10) {
text = "Hello";
}
const myElement = <h1>{text}</h1>;
Варіант 2:
Натомість використовуйте тернарні (потрійні) вирази:
Приклад
Напишіть "Hello" якщо x
менше, ніж 10, інакше "Goodbye":
const x = 5;
const myElement = <h1>{(x) < 10 ? "Hello" : "Goodbye"}</h1>;
Зауважте, що для того, щоб вставити вираз JavaScript у JSX, JavaScript має бути укладено у фігурні дужки {}
.