Создайте свой первый остров Astro
Используйте компонент Preact для приветствия ваших посетителей случайно выбранным приветственным сообщением!
Приготовьтесь к...
- Добавить Preact в ваш проект Astro
- Включить острова Astro (компоненты Preact
.jsx
) на вашей домашней странице - Использовать директивы
client:
чтобы сделать острова интерактивными
Добавьте Preact в ваш проект Astro
-
Если сервер разработки работает, остановите его, чтобы получить доступ к терминалу (клавиша ярлыка: Ctrl + C).
-
Добавьте возможность использования компонентов Preact в вашем проекте Astro одной командой:
-
Следуйте инструкциям командной строки, чтобы подтвердить добавление Preact в ваш проект.
Включите приветственный баннер Preact
Этот компонент будет принимать массив приветственных сообщений в качестве свойства и случайно выбирать одно из них для отображения в качестве приветственного сообщения. Пользователь может нажать кнопку, чтобы получить новое случайное сообщение.
-
Создайте новый файл в
src/components/
под названиемGreeting.jsx
Обратите внимание на расширение файла
.jsx
. Этот файл будет написан на Preact, а не на Astro. -
Добавьте следующий код в
Greeting.jsx
: -
Импортируйте и используйте этот компонент на вашей домашней странице
index.astro
.Проверьте предпросмотр в вашем браузере: вы должны увидеть случайное приветствие, но кнопка не будет работать!
-
Добавьте второй компонент
<Greeting />
с директивойclient:load
. -
Вернитесь на свою страницу и сравните два компонента. Вторая кнопка работает, потому что директива
client:load
говорит Astro отправить и перезапустить свой JavaScript на клиенте, когда страница загружается, делая компонент интерактивным. Мы называем это гидратированным компонентом. -
Как только разница станет понятна, уберите негидратированный компонент Greeting.
Анализируйте паттерн
Существуют и другие директивы client:
для изучения. Каждая из них отправляет JavaScript на клиент в разное время. client:visible
, например, отправит JavaScript компонента только тогда, когда он будет виден на странице.
Рассмотрите компонент Astro со следующим кодом:
-
Какие из пяти компонентов будут гидратированными островами, отправляя JavaScript на клиент?
-
В чем
<PreactBanner />
компоненты будут похожи? В чем они будут отличаться? -
Предположим, что компонент
SvelteCounter
показывает число и имеет кнопку для его увеличения. Если бы вы не могли видеть код вашего сайта, только опубликованную страницу, как бы вы определили, какой из двух компонентов<SvelteCounter />
используетclient:visible
?
Проверьте свои знания
Для каждого из следующих компонентов определите, что будет отправлено в браузер:
-
<ReactCounter client:load/>
-
<SvelteCard />