ut.code(); Learnへ戻る

作ったサイトを公開してみよう

タイトル画像

Vite + TS(準備中)

Astro(準備中)

SvelteKit

プロジェクト作成

GitHub Pagesにデプロイする

Cloudflare Pagesにデプロイする

Svelteことはじめ

stateを使ってみる

コンポーネントを利用する

Eachブロック、Ifブロック

ページ遷移、画像の使い方

自作コンポーネントの入れ子

ちょっとした小技

Eachブロック、Ifブロック

ここでも、Svelteの便利な機能を見ていきましょう。以下のようなオブジェクトの配列があったとします。

let primeMinisters = [
    {
        name: "Taro",
        gender: "male",
        birthYear: "1940",
        party: "Jimintou",
    },
    {
        name: "Yukio",
        gender: "male",
        birthYear: "1947",
        party: "Minshutou",
    },
    {
        name: "Naoto",
        gender: "male",
        birthYear: "1946",
        party: "Minshutou",
    },
    {
        name: "Yoshihiko",
        gender: "male",
        birthYear: "1957",
        party: "Minshutou",
    },
    {
        name: "Shinzo",
        gender: "male",
        birthYear: "1954",
        party: "Jimintou",
    }
];

この人たちのプロフィールを全部表示したいと思います。しかし、全員分直接書くのは大変ですね。そこで役に立つのがEachブロックです。src/routes/+page.svelteのスクリプトの部分に上の配列を追加し、HTMLの部分に以下のコードを追加してください。(Profileは、前のページで作った#lib/components/Profile.svelteからインポートしてください。)

{#each primeMinisters as primeMinister}
    <Profile name={primeMinister.name} gender={primeMinister.gender} birthYear={primeMinister.birthYear} party={primeMinister.party}/>
{/each}

上の例のように、Eachブロックは、{#each (配列名) as (配列の各要素に一時的につける名前)}という構文でHTMLの中に書きます。最後に{/each}と書いて締め、その間に挟んだ内容を、配列の各要素の分だけ繰り返します。

Eachブロックの使い方はなんとなくわかったと思うので、次はIfブロックの使い方を見ていきましょう。Eachブロックと組み合わせて使うと便利なので、先程のコードを少し改造していきます。src/routes/+page.svelteのHTMLの部分です。

{#each primeMinisters as primeMinister}
    {#if primeMinister.party === "Jimintou"}
        <h2>この人は、自民党の総理大臣です。</h2>
    {:else if primeMinister.party === "Minshutou"}
        <h2>この人は、民主党の総理大臣です。</h2>
    {:else}
        <h2>この人は、その他の党の総理大臣です。</h2>
    {/if}
    <Profile name={primeMinister.name} gender={primeMinister.gender} birthYear={primeMinister.birthYear} party={primeMinister.party}/>
{/each}

プロフィールの前に、どこの党の総理大臣か表示する文が加わったと思います。このように、Ifブロックは、{#if 条件式}、{:else if 条件式}、{:else}、{/if}と書いて、それぞれの条件で表示させたいものをその中に書きます。今回はEachブロックと組み合わせましたが、Ifブロック単独でも使うことができます。src/lib/components/Counter.svelteを以下のように改造してみましょう。

<script lang="ts">
    let count = $state(0);
</script>

<h1>現在のカウント:{count}</h1>    <!--このh1の色は赤にはならない-->
<button class="blue" onclick={()=>{count++;}}>増やす</button>
{#if count <=5}
    <p>5回以下です</p>
{:else if count <= 10}
    <p>10回以下です</p>
{:else}
    <p>10回を超えました!すごい!</p>
{/if}

10回を超えたら褒めてもらえるようになったと思います。

前へ
次へ

サードパーティライセンス