Skip to content

Компоненты и адаптеры

Каждый @block компилируется в типизированный компонент для вашего фреймворка. За это отвечает адаптер — отдельный пакет под каждый фреймворк (React, Vue, Svelte, SolidJS, Astro) и под чистый DOM. Какой адаптер активен, задаёт defaultAdapter в конфигурации.

Имя компонента

Имя компонента — это префикс + имя блока. По умолчанию префикс — E:

  • @block ButtonEButton
  • @block CardECard

Префикс настраивается опцией componentNamePrefix. Компонент импортируется напрямую из .ecss-файла:

tsx
import { EButton } from './Button.ecss';

Параметры — проп params

Параметры блока передаются единственным пропом params. Их типы выводятся из @param-объявлений, поэтому передать недопустимое значение не получится:

tsx
<EButton as="button" params={{ variant: 'primary' }}>
  Нажми меня
</EButton>

Подробнее о связи @paramparams — в разделе Параметры и состояния.

Тег — проп as

По умолчанию компонент рендерится как <div>. Проп as меняет корневой тег, а типизация подстраивает допустимые HTML-атрибуты под выбранный тег:

tsx
<EButton as="button" type="submit" params={{ variant: 'primary' }}>Отправить</EButton>

<EButton as="a" href="/about" params={{ variant: 'ghost' }}>Ссылка</EButton>

TIP

Не забывайте as для семантики: <EButton> без as отрендерится как <div>. Для кнопки укажите as="button", для ссылки — as="a".

Вложенные элементы

Если в блоке объявлены @element, они доступны как вложенные компоненты через статические свойства корневого:

tsx
<EButton params={{ withIcon: true }}>
  <EButton.Icon>★</EButton.Icon>
  <EButton.Text>Нажми меня</EButton.Text>
</EButton>

Какой адаптер выбрать

У всех адаптеров одинаковый API (params, as, суб-компоненты) — отличается только синтаксис конкретного фреймворка. Выберите свой:

Общий API всех адаптеров описан в обзоре адаптеров.