初めてのAstroアイランドを作成する
Preactコンポーネントを使い、ランダムに選択されたメッセージでサイト訪問者に挨拶しましょう!
ここで学ぶことは…
- AstroプロジェクトにPreactを追加する
- ホームページにAstroアイランド(Preactの
.jsx
コンポーネント)を追加する - アイランドをインタラクティブにするために
client:
ディレクティブを使用する
AstroプロジェクトにPreactを追加する
-
動作中であれば開発サーバーを停止し、ターミナルを使用できるようにします(キーボードショートカットはCtrl + Cです)。
-
以下のコマンドを実行して、AstroプロジェクトでPreactコンポーネントを使用できるようにします。
-
コマンドラインの指示に従って、プロジェクトにPreactを追加します。
Preactの挨拶用バナーを追加する
このコンポーネントは、挨拶用メッセージの配列をpropとして受け取り、その中からランダムに1つを選んでウェルカムメッセージとして表示します。ユーザーはボタンをクリックして新しいメッセージをランダムに受け取れます。
-
src/components/
にGreeting.jsx
という名前の新しいファイルを作成します。.jsx
というファイル拡張子が使われていることに注意してください。このファイルはAstroではなくPreactで書きます。 -
以下のコードを
Greeting.jsx
に追加します。 -
ホームページの
index.astro
でこのコンポーネントをインポートして使用します。ブラウザのプレビューを確認すると、ランダムな挨拶が表示されますが、ボタンは機能していないはずです。
-
client:load
ディレクティブを使用して、2つ目の<Greeting />
コンポーネントを追加します。 -
ページを再度確認し、2つのコンポーネントを比較します。2番目のボタンが機能しているのは、
client:load
ディレクティブによって、ページがロードされたときにJavaScriptをクライアントに送信して再実行するようAstroに指示しているためです。これにより、コンポーネントはインタラクティブになります。これは ハイドレートされた(hydrated) コンポーネントと呼ばれます。 -
違いがわかったら、ハイドレートされていないGreetingコンポーネントを削除します。
パターンを分析する
client:
ディレクティブは他にもあり、それぞれが異なるタイミングでJavaScriptをクライアントに送信します。たとえばclient:visible
は、コンポーネントがページ上に表示されたタイミングで対応するJavaScriptを送信します。
次のようなコードをもつAstroコンポーネントについて考えてみましょう。
-
5つのコンポーネントのうち、JavaScriptをクライアントに送信し、ハイドレートされるアイランドになるのはどれですか?
-
2つの
<PreactBanner />
コンポーネントで共通している点はどこですか?逆に異なる点はどこでしょうか? -
SvelteCounter
コンポーネントは数値を表示し、それを増やすためのボタンをもっているとします。ウェブサイトのソースコードを見ることはできず、公開されたページのみ確認できるとき、client:visible
を使用しているのは2つの<SvelteCounter />
コンポーネントのうちどちらか、どのように判断すればよいでしょうか?
確認テスト
以下のコンポーネントのそれぞれについて、ブラウザに送信される内容を選択してください。
-
<ReactCounter client:load/>
-
<SvelteCard />