Введение в язык JSX в React
Язык JSX - это обычный JavaScript, но с некоторыми дополнениями, позволяющими писать теги прямо в коде, без кавычек.
Теги можно возвращать через return:
function App() {
return <div>
text
</div>;
}
Теги можно записывать в переменные или константы:
function App() {
const elem = <div>text</div>;
return elem;
}
Давайте посмотрим, какие особенности имеет JSX.
Закрытость тегов
Все теги в JSX должны быть закрыты, в том числе теги, которые не требуют пары, например, input или br.
Следующий пример кода выдаст ошибку, так как инпут не закрыт:
function App() {
return <div>
<input>
</div>;
}
Закроем его с помощью обратного слеша:
function App() {
return <div>
<input />
</div>;
}
Корректность верстки
Верстка в JSX должна быть корректной. В частности, не все теги можно вкладывать друг в друга. Например, если в теге ul разместить абзац, это приведет к ошибке.
Помимо более-менее очевидных недопустимых вложенностей, есть также и неожиданные: таблицы.
В таблицах мы привыкли сразу в тег table вкладывать теги tr, вот так:
function App() {
return <table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>;
}
Такой код в React приведет к выводу предупреждения в консоли, так как tr должны быть вложены либо в тег tbody, либо в thead, либо в tfoot.
Давайте исправим проблему, сделав нашу таблицу корректной:
function App() {
return <table>
<tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>;
}
Атрибуты
В теги можно добавлять атрибуты:
function App() {
return <div id="elem">
text
</div>;
}
Некоторые атрибуты представляют собой исключения: вместо атрибута class следует писать атрибут className, а вместо атрибута for следует писать атрибут htmlFor:
function App() {
return <div className="block">
<label htmlFor="elem">text</label>
<input id="elem" />
</div>;
}
Практические задачи
Функция в вашем основном компоненте сейчас должна выглядеть следующим образом:
function App() {
return <div>
text
</div>;
}