SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Astroで始める静的サイト作成入門

Astroにおけるコンポーネントの基本~初心者もベテランも欲しかった! 最適化されたCSSスコープ~

Astroコンポーネントのprops

 さて、実際のWebサイトにおいてコンポーネントを再利用するうえでは、まったく同じ中身ではなく、一部の内容を書き換えて使用したい場面も多いと思います。

 例えば、以下のようにButtonコンポーネントを作成したとします(先ほど作成したglobal.cssで記述したCSSカスタムプロパティを使用することもできます)。

<button type="button" class="button">Get Started</button>

<style>
  .button {
    display: block;
    padding: 8px 32px;
    border: none;
    background-color: var(--color-primary);
    color: #fff;
  }
</style>

 このButtonコンポーネントを、index.astro内でHeaderコンポーネントと同様にimportして使用すると、

---
import "../css/global.css";
import Header from '../components/Header.astro';
import Button from '../components/Button.astro';
---
<!DOCTYPE html>
<html lang="ja">
  <head>...(略)...</head>
  <body>
    ...(略)...
    <main class="main">
      <article class="article">
      <h1 class="title">Astro</h1>
      <p>Homeページです。</p>
        <Button />
      </article>
    </main>
  </body>
</html>

このように共通のボタンとして表示されますが、ページによってはボタンの文言を変更したい場合もあるでしょう。

 そのような場合は、propsと呼ばれるコンポーネント内で使用する情報群を受け渡すことができます。

 まず、Buttonコンポーネントを以下のように修正します。

---
const { text = "Get Started" } = Astro.props;
---
<button type="button" class="button">{text}</button>

...(省略)...

 修正箇所は以下のとおりです。

  • コンポーネントスクリプト内でtextという変数を宣言し、propsを受け取る(初期値は”Get Started”) const { text = "Get Started" } = Astro.props;
  • button要素内で、受け取った変数を配置する(変数は{}で囲う) <button type="button" class="button">{text}</button>

 次に、index.astroを以下のように修正します。

---
import "../css/global.css";
import Header from '../components/Header.astro';
import Button from '../components/Button.astro';
---
<!DOCTYPE html>
<html lang="ja">
  <head>...(略)...</head>
  <body>
    ...(略)...
    <main class="main">
      <article class="article">
        <h1 class="title">Astro</h1>
        <p>Homeページです。</p>
        <Button text="Download" />
      </article>
    </main>
  </body>
</html>

 修正箇所は以下のとおりです。

  • Buttonコンポーネントを配置するときに、textという変数に表示したい文言を入れて、propsとして情報を渡す。 <Button text="Download" />

 これで共通のButtonコンポーネントとして使用しつつ、一部情報を書き換えて任意の文言で表示することができます(何もpropsを渡さなければ、初期値の”Get Started”が表示されます)。

propsを使ったコンポーネント
propsを使ったコンポーネント

まとめ

 今回ご説明した内容のまとめです。

  • 再利用可能なUIコンポーネントの作成
  • スコープされたCSSと外部CSSによるスタイリング
  • propsによる情報の受け渡し

 これらがAstroによるコンポーネント運用の基本知識となります。

 次回は、Astroの最新機能で実際にどのようなWebサイトが構築できるのかを紹介しつつ、自分に合った環境構築について解説していきたいと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Astroで始める静的サイト作成入門連載記事一覧

もっと読む

この記事の著者

池原健治(イケハラ ケンジ)

 ゲーム会社のUXデザイナー。デザイン、プロトタイピング、コーディングなどを担当する他、SNSでの情報発信や、登壇活動など、幅広く活動している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/18715 2023/12/15 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー