Синтаксис Astro
Если вы знаете HTML, то имеете уже достаточно знаний, для того, чтобы создать первый Astro компонент.
Синтаксис компонент Astro расширяет синтаксис HTML. Синтаксис был разработан таким образом, чтобы быть узнаваемым для тех, кто имеет опыт с HTML и JSX, добавляя поддержку встраивания компонент и JavaScript выражений.
JSX Выражения
Вы можете определить локальные JavaScript переменные внутри frontmatter части компонента внутри двойной конструкции (---
). После этого, эти переменные можно использовать внутри HTML шаблона компонента, используя JSX выражения!
Используя этот подход, вы можете использовать динамические значения, которые расчитываются внутри frontmatter. Но после использования в шаблоне, эти значения не становятся реактивными и не будут изменены никогда. Astro компоненты - это шаблоны, которые исполняются единожды, в фазе рендеринга.
Ниже представлены примеры отличий между Astro и JSX.
Переменные
Локальные переменные могут использоваться в HTML с помощью фигурных скобок:
Динамические атрибуты
Локальные переменные можно использовать в фигурных скобках для того, чтобы установить свойства HTML элементов и других компонент:
Функции и объекты невозможно передать в виде атрибутов HTML элементов, так как они будут преобразованы в строки. К примеру, нельзя установить обработчик событий для HTML элемента в Astro компоненте:
Вместо этого, для добавления обработчика событий используйте клиентский скрипт, как это делается в ванильном JavaScript:
Динамический HTML
Локальные переменные могут использоваться для динамической генерации HTML элементов:
Astro поддерживает условное отображение HTML с использованием логических операторов и тернарных выражений JSX:
Динамические HTML теги
Вы так же можете использовать динамические теги, установив локальные переменные как имя HTML тега или ссылки на импорт компонента:
Как используются динамические теги:
-
Имя переменной должно быть с заглавной буквы. К примеру, используйте
Element
, а неelement
. Иначе, Astro попытается отобразить имя этой переменной как HTML тег. -
Директивы для гидрации не поддерживаются. При использовании
client:*
директив гидрации (EN), Astro необходимо знать какой компонент добавлять в production сборку, а подобный паттерн препятствует корректной работе сборщика.
Фрагменты
Astro поддерживает использование как <Fragment> </Fragment>
, так и краткой записи <> </>
.
Фрагменты могут быть полезны в том случае, если нужно избежать излишних обёртков при добавлении set:*
directives (EN), как в следующем примере:
Отличия между 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-подобные комментарии.