Использование JavaScript в JSX с фигурными скобками
JSX позволяет писать разметку, похожую на HTML, прямо в файле JavaScript, благодаря чему логика рендеринга и контент находятся в одном месте. Иногда вам может понадобиться добавить небольшой фрагмент кода JavaScript или обратиться к динамическому свойству внутри этой разметки. В таком случае вы можете использовать фигурные скобки в JSX, чтобы 'открыть окно' в JavaScript.
Вы узнаете
- Как передавать строки с кавычками
- Как ссылаться на переменную JavaScript внутри JSX с помощью фигурных скобок
- Как вызывать функцию JavaScript внутри JSX с помощью фигурных скобок
- Как использовать объект JavaScript внутри JSX с помощью фигурных скобок
Передача строк с кавычками
Если вы хотите передать строковый атрибут в JSX, поместите его в одинарные или двойные кавычки:
export default function Avatar() { return ( <img className="avatar" src="https://react.dev/images/docs/scientists/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> );}Здесь 'https://react.dev/images/docs/scientists/7vQD0fPs.jpg' и "Gregorio Y. Zara' передаются в виде строк.
Но что, если вы хотите динамически задать текст src или alt? Вы можете использовать значение из JavaScript, заменив ' и " на { и }:
export default function Avatar() { const avatar = 'https://react.dev/images/docs/scientists/7vQD0fPs.jpg'; const description = 'Gregorio Y. Zara'; return ( <img className="avatar" src={avatar} alt={description} /> );}Обратите внимание на разницу между className='avatar', которое указывает имя CSS-класса 'avatar', делающее изображение круглым, и src= {avatar}, который считывает значение переменной JavaScript под названием avatar. Это потому, что фигурные скобки позволяют работать с JavaScript прямо в вашем разметке!
Использование фигурных скобок: окно в мир JavaScript
JSX — это особый способ написания JavaScript. Это означает, что внутри него можно использовать JavaScript — с фигурными скобками { }. В примере ниже сначала объявляется имя ученого, name, а затем оно вставляется с помощью фигурных скобок внутрь тега <h1>:
export default function TodoList() { const name = 'Gregorio Y. Zara'; return ( <h1>{name}'s To Do List</h1> );}Попробуйте изменить значение name с 'Gregorio Y. Zara' на 'Hedy Lamarr'. Видите, как меняется заголовок списка?
В фигурных скобках будет работать любое выражение JavaScript, включая вызовы функций, таких как formatDate():
const today = new Date();function formatDate(date) { return new Intl.DateTimeFormat( 'en-US', { weekday: 'long' } ).format(date);}export default function TodoList() { return ( <h1>To Do List for {formatDate(today)}</h1> );}Где использовать фигурные скобки
Внутри 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:
export default function TodoList() { return ( <ul style={{ backgroundColor: 'black', color: 'pink' }}> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> );}Попробуйте изменить значения backgroundColor и color.
Вы действительно можете увидеть объект JavaScript внутри фигурных скобок, если напишете его так:
<ul style={
{
backgroundColor: 'black',
color: 'pink'
}
}>В следующий раз, когда вы увидите {{ и }} в JSX, знайте, что это не что иное, как объект внутри фигурных скобок JSX!
Встроенные свойства style пишутся в формате camelCase. Например, HTML-код <ul style="background-color: black"> в вашем компоненте будет записан как <ul style={{ backgroundColor: 'black' }}>.
Еще больше веселья с объектами JavaScript и фигурными скобками
Вы можете объединить несколько выражений в один объект и ссылаться на них в вашем JSX внутри фигурных скобок:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' }};export default function TodoList() { return ( <div style={person.theme}> <h1>{person.name}'s Todos</h1> <img className="avatar" src="https://react.dev/images/docs/scientists/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> </div> );}В этом примере объект JavaScript person содержит строку name и объект theme:
const person = {
name: 'Gregorio Y. Zara',
theme: {
backgroundColor: 'black',
color: 'pink'
}
};Компонент может использовать эти значения из person следующим образом:
<div style={person.theme}>
<h1>Задачи {person.name}</h1>JSX — очень минималистичный язык шаблонов, поскольку позволяет организовывать данные и логику с помощью JavaScript.
Теперь вы знаете почти все о JSX:
- Атрибуты JSX в кавычках передаются как строки.
- Фигурные скобки позволяют вставлять логику и переменные JavaScript в разметку.
- Они работают внутри содержимого тега JSX или сразу после
=в атрибутах. {{и}}— это не специальный синтаксис: это объект JavaScript, заключенный в фигурные скобки JSX.
Написание разметки с помощью JSX
JSX — это расширение синтаксиса JavaScript, позволяющее писать разметку, похожую на HTML, прямо в файлах JavaScript. Хотя существуют и другие способы написания компонентов, большинство разработчиков React предпочитают лаконичность JSX, и он используется в большинстве кодовых баз.
Передача пропсов в компонент
Компоненты React используют *пропсы* для взаимодействия друг с другом. Каждый родительский компонент может передавать некоторую информацию своим дочерним компонентам, предоставляя им пропсы. Пропсы могут напоминать атрибуты HTML, но через них можно передавать любые значения JavaScript, включая объекты, массивы и функции.