SHOEISHA iD

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

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

Webページ用UIフレームワーク「Svelte」の活用

追加パッケージなしで利用可能! ページ全体の状態を統一的に管理できる「Svelte」のストア機能を紹介

Webページ用UIフレームワーク「Svelte」の活用 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

基本的なストアの利用方法

 基本的なストアの利用法を、図2のサンプルで説明します。カウンターの値が格納されたストアをもとに、CountDisplayコンポーネントがカウンターの値を表示、CountOperatorコンポーネントが変更します。

図2:ストアを利用するサンプル(p001-writable)
図2:ストアを利用するサンプル(p001-writable)

 ストアの実装はリスト1の通りです。(1)でカウンターの値に対応する変数countを宣言して、0で初期化します。「writable」記述は、このストアが書き込み可能であることを表します。

[リスト1]書き込み可能なストアの実装(p001-writable/src/lib/store.ts)
import { writable } from 'svelte/store';

// 書き込み可能なストア ...(1)
export const count = writable(0);

 countストアを参照してカウンター値を表示するコンポーネントの<script>部はリスト2の通りです。

[リスト2]ストアを参照するコンポーネントの<script>部(p001-writable/src/routes/CountDisplay.svelte)
<script lang="ts">
  import { count } from '$lib/store';
  import { onMount } from 'svelte';

  // 画面に表示するカウンター ...(1)
  let countValue: number;

  onMount(() => {
    // マウント時、countの値を常に取得するようサブスクライブする処理 ...(2)
    // サブスクライブを解除(アンサブスクライブ)する関数が戻る
    const unsubscribe = count.subscribe(value => {
      countValue = value;
    });
    return () => {
      // アンマウント時、アンサブスクライブする処理 ...(3)
      unsubscribe();
    };
  });
</script>

 画面に実際に表示されるカウンターは(1)のcountValue変数です。onMount関数内では、まずコンポーネントのマウント(表示)時に(2)のcount.subscribeメソッドでcountストアをサブスクライブ(購読)して、countValueにカウンターの値を常に反映するようにします。

 また、countストアをアンサブスクライブ(購読解除)する関数がcount.suscribeメソッドの戻り値として返却されるので、コンポーネントのアンマウント(非表示)時に(3)の通りunsubscribe関数を実行してアンサブスクライブするようにします。

 一方、countストアを変更するコンポーネントの<script>部はリスト3の通りです。

[リスト3]ストアを変更するコンポーネントの<script>部(p001-writable/src/routes/CountOperator.svelte)
<script>
  import { count } from '$lib/store';

  // カウントアップ ...(1)
  const increment = () => {
    count.update(n => n + 1);
  };
  // リセット ...(2)
  const reset = () => {
    count.set(0);
  };
</script>

 カウントアップボタンのクリック時に実行される(1)のincrement関数では、countストアのupdateメソッドで、ストアの値を1加算します。updateメソッドには、ストアの値を変更する関数を渡します(「n => n + 1」は、引数に1を加算して返却する関数を表します)。リセットボタンのクリック時に実行される(2)のreset関数では、countストアのsetメソッドで、ストアの値を0に設定します。

次のページ
ストアの自動サブスクライブ

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webページ用UIフレームワーク「Svelte」の活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20670 2024/12/27 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング