Синтаксис Astro
Если вы знаете HTML, то имеете уже достаточно знаний, для того, чтобы создать первый Astro компонент.
Синтаксис компонентов Astro - это надмножество HTML. Синтаксис был разработан так, чтобы показаться знакомым любому, кто имеет опыт написания HTML или JSX, и добавляет поддержку для встраивания компонентов и выражений JavaScript.
JSX Выражения
Заголовок раздела JSX ВыраженияВы можете определить локальные переменные JavaScript внутри скрипта компонента frontmatter между двумя блоками кода ( ---
) компонента Astro. Затем вы можете вставить эти переменные в HTML-шаблон компонента, используя JSX выражения!
Используя этот подход, вы можете включать динамические значения, которые расчитываются внутри frontmatter. Но после включения эти значения не реактивны и никогда не изменятся. Компоненты Astro - это шаблоны, которые исполняются единожды, в фазе рендеринга.
Ниже представлены примеры отличий между Astro и JSX.
Переменные
Заголовок раздела ПеременныеЛокальные переменные можно добавить в HTML с помощью синтаксиса фигурных скобок:
Динамические атрибуты
Заголовок раздела Динамические атрибутыЛокальные переменные можно использовать в фигурных скобках для передачи значений атрибутов как элементам HTML, так и компонентам:
Атрибуты HTML будут преобразованы в строки, поэтому передать функции и объекты элементам HTML невозможно. Например, вы не можете назначить обработчик события элементу HTML в компоненте Astro:
Вместо этого используйте клиентский скрипт для добавления обработчика событий, как вы бы делали в обычном JavaScript:
Динамический HTML
Заголовок раздела Динамический HTMLЛокальные переменные можно использовать в JSX-подобных функциях для создания динамически генерируемых HTML-элементов:
Astro поддерживает условное отображение HTML с использованием логических операторов и тернарных выражений JSX:
Динамические HTML теги
Заголовок раздела Динамические HTML тегиВы также можете использовать динамические теги, установив переменную на имя HTML-тега или импорта компонента:
При использовании динамических тегов:
-
Имена переменных должны быть написаны с заглавной буквы. Например, используйте
Element
, а неelement
. В противном случае Astro попытается отобразить имя переменной как HTML-тег. -
Директивы для гидрации не поддерживаются. При использовании
client:*
директив гидрации, Astro необходимо знать, какие компоненты добавлять в production сборку, а подобный паттерн препятствует корректной работе сборщика.
Фрагменты
Заголовок раздела ФрагментыAstro поддерживает использование как <Fragment> </Fragment>
, так и краткой записи <> </>
.
Фрагменты могут быть полезны, чтобы избежать оберточных элементов при добавлении директив set:*
, как в следующем примере:
Отличия между Astro и JSX
Заголовок раздела Отличия между Astro и JSXСинтаксис компонентов Astro - это надмножество HTML. Он был разработан так, чтобы казаться знакомым любому, кто имеет опыт работы с HTML или JSX, но есть несколько ключевых различий между файлами .astro
и JSX.
Атрибуты
Заголовок раздела АтрибутыВ Astro вы используете стандартный формат kebab-case
для всех HTML атрибутов вместо camelCase
из JSX. Это работает, в том числе, для class
атрибута, который не поддерживается в React.
Множественные элементы
Заголовок раздела Множественные элементыШаблон Astro компонента может выводить множество элементов без необходимости оборачивать их все в единственный элемент, например div
или <>
, как делается в JavaScript или JSX.
Комментарии
Заголовок раздела КомментарииВ Astro вы можете использовать стандартный HTML или JavaScript-подобный синтаксисы.
HTML-подобные комментарии будут включены в DOM браузера, а комментарии в стиле JS будут пропущены. Чтобы оставлять сообщения TODO или другие пояснения, относящиеся только к разработке, вы можете использовать JavaScript-подобные комментарии.