Astro コンポーネントをプロジェクト規約に沿って作成する。Props 定義と、JavaScript を伴う場合のカスタム要素パターンを適用する。
$ARGUMENTS の要件に基づいて Astro コンポーネントを作成する。引数が省略された場合は、ユーザーに要件を確認すること。
以下の規約に従うこと。
必ず Props インターフェースを定義し、対応する HTML 要素の HTMLAttributes を extends する。
---
import type { HTMLAttributes } from "astro/types";
interface Props extends HTMLAttributes<"p"> {}
const { ...rest } = Astro.props;
---
<p {...rest}>...</p>
クライアントサイド JavaScript が必要な場合は、カスタム要素(Custom Elements)に切り出す。
<greeting-component>)<script> 内で HTMLElement を継承したクラスを定義し、customElements.define() で登録するconnectedCallback() 内で行う---
import type { HTMLAttributes } from "astro/types";
interface Props extends HTMLAttributes<"p"> {}
const { ...rest } = Astro.props;
---
<greeting-component>
<p {...rest}>Loading...</p>
</greeting-component>
<script>
import { apiClient } from "../lib/api-client.js";
export class GreetingComponent extends HTMLElement {
async connectedCallback() {
const p = this.querySelector("p")!;
const res = await apiClient.greeting.$get();
p.textContent = await res.text();
}
}
customElements.define("greeting-component", GreetingComponent);
</script>
-component サフィックス(例: greeting-component, me-component)Component サフィックス(例: GreetingComponent, MeComponent)