コンテンツにスキップ

ソーシャルメディアフッターを作成する

ここで学ぶことは...

  • フッターコンポーネントを作成する
  • ソーシャルメディアコンポーネントを作成し、propsを渡す

ページでAstroコンポーネントを使用したので、次にコンポーネントの中で別のコンポーネントを使用してみましょう!

フッターコンポーネントを作成する

  1. src/components/Footer.astroに新しいファイルを作成します。

  2. 新しいファイルFooter.astroに以下のコードをコピーします。

    ---
    const platform = "github";
    const username = "withastro";
    ---
    
    <footer>
      <p>私のプロジェクトについて詳しくは<a href={`https://www.${platform}.com/${username}`}>{platform}</a>をご確認ください!</p>
    </footer>

Footer.astroをインポートして使用する

  1. index.astroabout.astroblog.astroの各Astroページのフロントマターに以下のインポート文を追加します。

    import Footer from '../components/Footer.astro';
  2. 各ページのAstroテンプレートに<Footer />コンポーネントを追加します。ページの一番下にフッターを表示するために、</body>閉じタグの直前に置いてください。

        <Footer />
      </body>
    </html>
  3. ブラウザのプレビューで、各ページに新しくフッターのテキストが表示されていることを確認してください。

やってみよう - フッターをカスタマイズする

複数のソーシャルネットワーク(Instagram、Twitter、LinkedInなど)を表示し、またユーザー名を追加して自分のプロフィールに直接リンクするようにフッターをカスタマイズしてください。

コードの確認

ここまでチュートリアルの各ステップに従ってきた場合、index.astroファイルは以下のようになっているはずです。

---
import Navigation from '../components/Navigation.astro';
import Footer from '../components/Footer.astro';
import '../styles/global.css';

const pageTitle = 'ホームページ';
---

<html lang="ja">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
    <Navigation />
		<h1>{pageTitle}</h1>
		<Footer />
	</body>
</html>

ソーシャルメディアコンポーネントを作成する

リンクしたいオンラインアカウントが複数ある場合のために、再利用可能なコンポーネントを1つ作成し、それを何度も表示するようにしましょう。これを使う際、オンラインプラットフォームとユーザー名という2つのプロパティ(props)を渡します。

  1. src/components/Social.astroに新しいファイルを作成します。

  2. 新しいファイルSocial.astroに以下のコードをコピーします。

    ---
    const { platform, username } = Astro.props;
    ---
    <a href={`https://www.${platform}.com/${username}`}>{platform}</a>

Social.astroをフッターにインポートして使用する

  1. 上の新しいコンポーネントをインポートして3回使用するように、src/components/Footer.astroのコードを変更します。その際、毎回異なるコンポーネント属性をpropsとして渡します。

    ---
    const platform = "github";
    const username = "withastro";
    import Social from './Social.astro';
    ---
    
    <footer>
      <p>私のプロジェクトについて詳しくは<a href={`https://www.${platform}.com/${username}`}>{platform}</a>をご確認ください!</p>
      <Social platform="twitter" username="astrodotbuild" />
      <Social platform="github" username="withastro" />
      <Social platform="youtube" username="astrodotbuild" />
    </footer>
  2. ブラウザのプレビューを確認してください。3つのプラットフォームへのリンクを含んだ新しいフッターが各ページに表示されているはずです。

ソーシャルメディアコンポーネントにスタイルを適用する

  1. <style>タグをsrc/components/Social.astroに追加して、リンクの外観をカスタマイズします。

    ---
    const { platform, username } = Astro.props;
    ---
    <a href={`https://www.${platform}.com/${username}`}>{platform}</a>
    
    <style>
      a {
        padding: 0.5rem 1rem;
        color: white;
        background-color: #4c1d95;
        text-decoration: none;
      }
    </style>
  2. src/components/Footer.astro<style>タグを追加して、コンテンツのレイアウトを改善します。

    ---
    import Social from './Social.astro';
    ---
    <style>
      footer {
        display: flex;
        gap: 1rem;
        margin-top: 2rem;
      }
    </style>
    
    <footer>
      <Social platform="twitter" username="astrodotbuild" />
      <Social platform="github" username="withastro" />
      <Social platform="youtube" username="astrodotbuild" />
    </footer>
  3. ブラウザのプレビューを再度開き、各ページに新しいフッターが表示されていることを確認します。

確認テスト

  1. titleauthordateの各値をpropsとして受け取るために、Astroコンポーネントのフロントマターに書く必要があるコードはどれですか?

  2. Astroコンポーネントに値をpropsとして渡すにはどうすればよいですか?

チェックリスト

Resources

貢献する コミュニティ スポンサー