Синтаксис JSX
JSX расшифровывается как JavaScript XML. Т.е. смесь JavaScript и HTML, которая используется в React.js в методе return (render) для визуализации. Задача JSX – облегчить построение интерфейсов в React.
Также, JSX позволяет просто создавать элементы и помещать их в DOM без каких либо операций createElement, appendChild.
JSX преобразует HTML-теги в элементы React.
1. Создание и вывод константы
Создадим в App.js константу и выведем ее в return. Для вывода переменной применяется синтаксис {} фигурных скобок ( иногда называется Mustache template)
function App() {
// создание и вывод константы
const d1 = 567;
return (
<div className="App">
<p>Вывод константы {d1}</p>
</div>
);
}
2. Создание и вывод переменной
Ничем не отличается от вывода константы — аналогично применяем синтаксис “усов”.
function App() {
// создание и вывод переменной
const d2 = 'Hello';
return (
<div className="App">
<p>Вывод переменной {d2}</p>
</div>
);
}
Согласитесь — довольно просто и не нужно получать элемент через querySelector, делать innerHTML, textContent etc.
Также мы можем внутри {} писать выражения. Например конкатенация.
function App() {
// конкатенация
const d2 = 'Hello';
return (
<div className="App">
<p>Конкатенация текста {d2 + ' World'}</p>
</div>
);
}
Либо математические операции с переменной.
function App() {
// математические операции с переменной
const d2 = 7;
return (
<div className="App">
<p>Вывод переменной {d2*9}</p>
</div>
);
}
3. Вывод массива
Выводить массив на страницу — операция которая требует приведения типа к строке. Обычно в JavaScript это делается с помощью цикла или reduce. В React все намного проще. Применяется метод массива map:
function App() {
// вывод массива
const d4 = [11,22,33];
return (
<div className="App">
<div>Вывод массива:
{d4.map(item => item + ' ')}
</div>
</div>
);
}
4. Создание списка (элементов) на основе массива
В синтаксисе JSX упрощено создание элементов. Давайте дополним предыдущий пример и создадим список.
function App() {
// создание списка
const d4 = [11,22,33];
return (
<div className="App">
<div>Вывод массива списком:
{d4.map(item => <li key={item}>{item}</li>)}
</div>
</div>
);
}
Обратите внимание, в качестве атрибута в теге li добавлен key. Если его убрать то в консоли будет ошибка. Ключи должны быть уникальны в рамках элемента. Т.е. если у вас есть повторяющиеся элементы — например элементы списка, React требует чтобы таким элементам присваивался атрибут key уникальный в рамках элемента. Ключи могут повторяться в разных элемента.
Ключ это строка. Можно применять id элементов, или генерированные случайные строки.
5. Вывести сумму элементов массива
Давайте рассмотрим пример применения метода массива для расчета внутри JSX.
function App() {
// сумма массива
const d4 = [11,22,33];
return (
<div className="App">
<div>Сумма элементов массива:
{d4.reduce((accum, item) => accum + item)}
</div>
</div>
);
}
Обратите внимание, так можно применять методы которые возвращают результат. Например, forEach, который просто применяет функцию применить не получится.
6. Присвоить стили inline
Давайте создадим переменную и привоем ей строку — цвет. Попробуем присвоить inline стиль элементу. Присвоение стилей также можно сделать через {}.
function App() {
// Присвоить inline стиль
const redColor = 'red';
return (
<div className="App">
<p style={{color: redColor}}>Применяем inline стиль</p>
</div>
);
}
Таким образом можно присвоить одно свойство, но если свойств много? Двигаемся дальше.
7. Присвоить объект со стилями
Если у вас CSS свойства для элемента DOM заданы в виде объекта – то примените следующий способ добавления стилей.
function App() {
// Присвоить объект как стиль
const objectStyles = {
'fontWeight' : 'bold',
'color' : 'orange',
'textTransform' : 'uppercase'
}
return (
<div className="App">
<p style={objectStyles}>Применяем объект как инлайн стили</p>
</div>
);
}
Обратите внимание на правила записи стилей. Не font-weight
, а fontWeight
, не text-transform
а textTransform
. Не забывайте писать CSS свойства в корректном стиле.
8. Присвоить класс CSS из переменной
Представим, что имя класса лежит в переменной. Задача, присвоить данный класс в JSX. Реализуем так:
function App() {
// Вывод класса CSS
const bold = 'text-bold';
return (
<div className="App">
<p className = {`some-class ${bold}`}>Вывод класса CSS из переменной</p>
</div>
);
}
В таком стиле класс text-bold
будет присвоить к элементу p
.
9. Условный рендеринг с помощью класса
Допустим у нас есть два класса (CSS класса). Допустим класс hide
, который содержит свойство display: none
, и класс show
, который содержит свойства display: block
.
Представим, что мы хотим в зависимости от условий — присваивать или тот или иной класс, тем самым скрывая или показывая блок. Реализуем:
function App() {
// Условный рендеринг
const d5 = 5;
return (
<div className="App">
<div className={d5 < 10 ? "hide" : "show"}>Hide - show element</div>
</div>
);
}
Как видно, если переменная d5 меньше 10 то div будет скрыт. Если больше — отображен. Не забывайте прописать CSS свойства для этих классов в CSS.
Если мы коснулись условий, давайте сделаем вывод просто текста в зависимости от условия:
function App() {
// Условный рендеринг
const d5 = 5;
return (
<div>Условный рендеринг:
<p>{d5 < 10 ? "Hello" : "Goodbye"}</p>
</div>
);
}
Т.е. мы научились в зависимости от условий создавать внешний вид компонента.
10. Создаем элемент в JSX
В самом начале юнита было сказано, что JSX позволяет быстро создавать элементы. Пробуем:
function App() {
// Создаем элемент
const head1 = <h1>Its h1</h1>;
return (
<div>Create Element {head1}</div>
);
}
Давайте попробуем создать более сложный, с точки зрения верстки элемент. Например, список.
function App() {
// Создание элемента
const list = (
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Cherries</li>
</ul>
);
return (
<div>Создание блокового элемента
{list}
</div>
);
}
11. Выполнение функции в JSX
Выполним функцию внутри JSX кода:
function App() {
// Вызов функции
function test1(){
let c = 9;
return c*7;
}
return (
<div>Вызов функции: {test1()}</div>
);
}
Аналогично можно создать стрелочную функцию и выполнить. Пробуем.
function App() {
// Вызов функции
const test2 = () => {
let c = 10;
return 5 * c;
}
return (
<div>Вызов функции стрелочной: {test2()}</div>
);
}
12. Создание таблиц в JSX
Когда вы создаете таблицу в JSX, следует учесть необходимость прописывать теги thead, tbody и т.д.
function App() {
const t = (
<table>
<tbody>
<tr>
<th>Head1</th>
<th>Head2</th>
</tr>
<tr>
<td>One</td>
<td>Two</td>
</tr>
</tbody>
</table>
);
return (
<div>Таблица:
{t}
</div>
);
}
Итог
JSX позволяет упростить работу с версткой, созданием и выводом элементом на страницу, отходя от привычных по JS выводам типа append, innerHTML...
Last updated