JavaScript в JSX с фигурными скобками
JSX позволяет писать HTML-подобную разметку внутри JavaScript-файла, сохраняя логику рендеринга и содержимое в одном месте. Иногда вам может понадобиться добавить немного JavaScript-логики или сослаться на динамическое свойство внутри этой разметки. В такой ситуации вы можете использовать фигурные скобки в JSX, чтобы открыть окно в JavaScript.
Вы узнаете
- Как передавать строки в кавычках
- Как ссылаться на JavaScript-переменную внутри JSX с помощью фигурных скобок
- Как вызывать JavaScript-функцию внутри JSX с помощью фигурных скобок
- Как использовать JavaScript-объект внутри JSX с помощью фигурных скобок
Передача строк в кавычках
Когда вы хотите передать строковый атрибут в JSX, вы заключаете его в одинарные или двойные кавычки:
Здесь"https://i.imgur.com/7vQD0fPs.jpg" и "Gregorio Y. Zara"передаются как строки.
Но что, если вы хотите динамически указать текст дляsrcилиalt? Вы можетеиспользовать значение из JavaScript, заменив" и "на{ и }:
Обратите внимание на разницу междуclassName="avatar", который указывает имя CSS-класса"avatar", делающего изображение круглым, иsrc={avatar}, который читает значение JavaScript-переменной с именемavatar. Это потому, что фигурные скобки позволяют работать с JavaScript прямо в вашей разметке!
Использование фигурных скобок: окно в мир JavaScript
JSX — это особый способ написания JavaScript. Это означает, что внутри него можно использовать JavaScript — с помощью фигурных скобок{ }. В примере ниже сначала объявляется имя учёного,name, затем оно встраивается с помощью фигурных скобок внутрь<h1>:
Попробуйте изменить значениеname с 'Gregorio Y. Zara'на'Hedy Lamarr'. Видите, как меняется заголовок списка?
Любое JavaScript-выражение будет работать между фигурными скобками, включая вызовы функций, такие какformatDate():
Где использовать фигурные скобки
Вы можете использовать фигурные скобки внутри JSX только двумя способами:
- Как текстнепосредственно внутри JSX-тега:
<h1>{name}'s To Do List</h1>работает, а<{tag}>Gregorio Y. Zara's To Do List</{tag}>— нет. - Как атрибутынепосредственно после знака
=:src={avatar}прочитает переменнуюavatar, аsrc="{avatar}"передаст строку"{avatar}".
Использование «двойных фигурных скобок»: CSS и другие объекты в JSX
Помимо строк, чисел и других JavaScript-выражений, вы даже можете передавать объекты в JSX. Объекты также обозначаются фигурными скобками, например,{ name: "Hedy Lamarr", inventions: 5 }. Поэтому, чтобы передать JS-объект в JSX, вы должны обернуть объект в другую пару фигурных скобок:person={{ name: "Hedy Lamarr", inventions: 5 }}.
Вы можете встретить это со встроенными CSS-стилями в JSX. React не требует использования встроенных стилей (CSS-классы отлично подходят для большинства случаев). Но когда вам нужен встроенный стиль, вы передаёте объект атрибутуstyle:
Попробуйте изменить значенияbackgroundColor и color.
Вы действительно можете увидеть JavaScript-объект внутри фигурных скобок, когда пишете его вот так:
В следующий раз, когда вы увидите{{ и }}в JSX, знайте, что это не что иное, как объект внутри JSX-фигурных скобок!
Подводный камень
Встроенные свойстваstyleзаписываются в camelCase. Например, HTML<ul style="background-color: black">в вашем компоненте будет записано как<ul style={{ backgroundColor: 'black' }}>.
Больше интересного с JavaScript-объектами и фигурными скобками
Вы можете поместить несколько выражений в один объект и ссылаться на них в вашем JSX внутри фигурных скобок:
В этом примере JavaScript-объектpersonсодержит строкуnameи объектtheme:
Компонент может использовать эти значения изpersonследующим образом:
JSX — это очень минималистичный язык шаблонов, потому что он позволяет вам организовывать данные и логику с помощью JavaScript.
Итоги
Теперь вы знаете почти всё о JSX:
- Атрибуты JSX внутри кавычек передаются как строки.
- Фигурные скобки позволяют вносить JavaScript-логику и переменные в вашу разметку.
- Они работают внутри содержимого JSX-тега или сразу после
=в атрибутах. {{и}}— это не специальный синтаксис: это JavaScript-объект, помещённый внутрь JSX-фигурных скобок.
Попробуйте выполнить несколько заданий
Challenge 1 of 3:Исправьте ошибку #
Этот код падает с ошибкой Objects are not valid as a React child:
Можете найти проблему?
