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