「Svelte」でコンポーネントの表示・更新時に処理を実行できるライフサイクル関数の利用
Webページ用UIフレームワーク「Svelte」の活用 第4回
ダウンロード サンプルファイル (76.5 KB)
本連載では、Webページ用UIフレームワーク「Svelte」の活用方法を順を追って説明しています。前回はデータ内容をWebページに反映するリアクティブ機能とバインディング機能を説明しました。今回はコンポーネントの表示や更新のタイミングで処理を実行できるライフサイクル関数の利用法を説明します。
はじめに
SvelteはWebページのUIを構築するためのフレームワークです。コンパイルによりプレーンなJavaScriptを生成し、実行時にSvelte固有の実装を利用しないことで、実行ファイルのサイズを小さくできる特徴があります。
本連載ではSvelteの活用方法を、順を追って説明していきます。前回はデータの変更をWebページに反映させるために利用できるリアクティブ機能とバインディング機能を説明しました。今回はSvelteコンポーネントのライフサイクル関数を取り上げます。
Svelteのコンポーネントには、作成されるときを開始、破棄されるときを終了とするライフサイクルがあり、ライフサイクルのさまざまなタイミングで処理を実行できる関数(ライフサイクル関数)が定義されています。今回はこのライフサイクル関数について、サンプルとともに利用法を説明します。
対象読者
- Webページのファイルサイズをより小さくしたい方
- Svelteで実装していくイメージを把握したい方
- 画面が更新されるタイミングで処理を実行する必要がある方
必要な環境
サンプルコードは、以下の環境で動作を確認しています。
- Windows 11
- Svelte 4.2.19
- SvelteKit 2.7.0
- Node.js v20.18.0 64bit版
- Microsoft Edge 129.0.2792.89
サンプルコードを実行するには、サンプルのフォルダーで「npm install」コマンドを実行してライブラリをダウンロード後、「npm run dev」コマンドを実行して、「http://localhost:5173/」をWebブラウザーで表示します。
コンポーネントの表示・非表示時に実行されるonMount関数
onMountは、コンポーネントが画面に表示される(マウントされる)ときと、画面から削除された(アンマウントされた)時の処理を実装できるライフサイクル関数です。
onMount関数の利用方法を、図1のサンプルで説明します。サンプルを実行すると、現在時刻を更新表示するコンポーネントが表示されます。また、チェックボックスでコンポーネントの表示・非表示を切り替えでき、コンポーネント表示時のみ、コンソールにも現在時刻がログ出力されます。
図1を表示するWebページ全体のコンポーネントはリスト1の通りです。
(1)で現在時刻を表示するClockコンポーネントをインポートします。(2)のisShowClock変数は、(3)でチェックボックスの<input>要素に記述されたbind:checked属性により、チェックボックスのチェック状態と連動するようになります。(4)の{#if}~{/if}記述により、チェックボックスがチェックされてisShowClock変数がtrueの場合のみ、Clockコンポーネントが表示されるようになります。
<script lang="ts">
// Clockコンポーネントをインポート ...(1)
import Clock from './Clock.svelte';
// Clockコンポーネントを表示するかどうか ...(2)
let isShowClock = true;
</script>
<!-- isShowClockに対応するチェックボックス ...(3)-->
<label>
<input type="checkbox" bind:checked={isShowClock} />
時計を表示
</label>
<!-- isShowClockがtrueの場合、Clockコンポーネントを表示 ...(4)-->
{#if isShowClock}
<Clock />
{/if}
現在時刻を表示するClockコンポーネントは、リスト2の通り実装します。
<script lang="ts">
import { onMount } from 'svelte';
// 現在時刻を格納する変数
let date = new Date();
// コンポーネントがマウント・アンマウントされるときの処理 ...(1)
onMount(() => {
// マウント時の処理:定期実行を開始 ...(1a)
const intervalId = setInterval(() => {
date = new Date();
console.log(date);
}, 1000);
return () => {
// アンマウント時の処理:定期実行を停止 ...(1b)
clearTimeout(intervalId);
};
});
</script>
<!-- 現在時刻を表示 ...(2)-->
<div>{date}</div>
onMount関数は(1)で利用しています。関数内にはマウント時の処理を記述します。ここでは(1a)でsetInterval関数を利用して、1秒ごとに現在日時を取得してdate変数に格納し、コンソールにログ出力するよう記述しています。date変数は、(2)の記述により画面に表示されます。
一方、アンマウント時の処理は、onMount関数で戻り値に設定する関数内に記述します。ここでは(1b)でclearTimeout関数を利用して、(1a)で設定した定期実行を停止するよう記述しています。
ここで、onMount関数のreturn記述を削除してサンプルを実行すると、コンポーネントがアンマウントされた後も定期実行が停止せず、コンソールに現在時刻がログ出力され続けてしまいます(図2)。
このような事態を防ぐために、マウント時の初期化処理とアンマウント時のクリーンアップ処理の両方をonMount関数で実装することが重要となります。
この記事は参考になりましたか?
- Webページ用UIフレームワーク「Svelte」の活用連載記事一覧
-
- 追加パッケージなしで利用可能! ページ全体の状態を統一的に管理できる「Svelte」のスト...
- 「Svelte」でコンポーネントの表示・更新時に処理を実行できるライフサイクル関数の利用
- 「Svelte」でWebページの内容を動的に更新する、リアクティブ機能とバインディング機能...
- この記事の著者
-
WINGSプロジェクト 吉川 英一(ヨシカワ エイイチ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
