SHOEISHA iD

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

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

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

「Svelte」でWebページの内容を動的に更新する、リアクティブ機能とバインディング機能の活用方法

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

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

Svelteのバインディング機能(2)

セレクトボックスと複数選択セレクトボックス

 プルダウンで1項目を選択するセレクトボックスの例を図11に示します。

図11:セレクトボックスのバインディング(p003-bindings)
図11:セレクトボックスのバインディング(p003-bindings)

 図11の実装はリスト10の通りです。<select>タグにbind:value={value}と属性を指定して、セレクトボックスとvalue変数を紐づけます。

[リスト10]セレクトボックスのバインディング実装(p003-bindings/src/routes/SelectBox.svelte)
<script lang="ts">
  let value: string = 'pixel9';
</script>

<select bind:value={value}>
  <option value="pixel9">Google Pixel 9</option>
  <option value="galaxyzfold5">Samsung Galaxy Z Fold5</option>
  <option value="edge50pro">motorola edge 50 pro</option>
</select>
<div>→選択値: {value}</div>

 図12の通り、セレクトボックスで複数選択をさせることもできます。

図12:複数選択セレクトボックスのバインディング(p003-bindings)
図12:複数選択セレクトボックスのバインディング(p003-bindings)

 図12の実装はリスト11の通りです。複数選択させるため、<select>タグにmultiple属性を追加します。また紐づける変数は配列にします。

[リスト11]複数選択セレクトボックスのバインディング実装(p003-bindings/src/routes/MultiSelectBox.svelte)
<script lang="ts">
  let arr: Array<string> = [];
</script>

<select bind:value={arr} multiple>
  <option value="pixel9">Google Pixel 9</option>
  <option value="galaxyzfold5">Samsung Galaxy Z Fold5</option>
  <option value="edge50pro">motorola edge 50 pro</option>
</select>
<div>→選択値: {arr.join(', ')}</div>

親子コンポーネント間のバインディング

 ここまでのバインディングはすべて1つのコンポーネント内で行ってきましたが、親子コンポーネント間でバインディングを行うこともできます。図13では、親と子どちらのコンポーネントでテキストボックスを編集しても、編集した文字列が親と子両方のコンポーネントに反映されます。

図13:親子コンポーネント間のバインディング(p003-bindings)
図13:親子コンポーネント間のバインディング(p003-bindings)

 親コンポーネントの実装はリスト12の通りです。(1)で子コンポーネントを参照し、(2)で表示させます。この時子コンポーネントにbind:childValue={parentValue}と属性を指定して、親コンポーネントのparentValue変数を、子コンポーネントのchildValueプロパティに紐づけます。

[リスト12]親コンポーネントの実装(p003-bindings/src/routes/ParentTextBox.svelte)
<script lang="ts">
  import ChildTextBox from "./ChildTextBox.svelte"; // ...(1)
  let parentValue = 'Apple iPhone 16';
</script>

<div class="parent">
  <h4>親コンポーネント</h4>
  <input bind:value={parentValue}>
  <div>→入力値: {parentValue}</div>
</div>
<div class="child">
  <h4>子コンポーネント</h4>
  <ChildTextBox bind:childValue={parentValue} /> <!--(2)-->
</div>

 子コンポーネントの実装はリスト13の通りです。(1)のexport let~記述でchildValueプロパティを定義して、(2)で子コンポーネント内のテキストボックスと紐づけています。

[リスト13]子コンポーネントの実装(p003-bindings/src/routes/ChildTextBox.svelte)
<script lang="ts">
  export let childValue: string; // ...(1)
</script>

<input bind:value={childValue}> <!--(2)-->
<div>→入力値: {childValue}</div>

まとめ

 本記事では、Svelteで動的なWebページの更新を実現するリアクティブ機能と、Webページの入力内容を変数と紐づけるバインディング機能の利用方法を説明しました。細かい処理はSvelteが面倒を見てくれるので、プログラマーはシンプルに実装できます。次回は、Svelteにおけるコンポーネントライフサイクルについて説明します。

参考資料

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

  • 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/20381 2024/11/05 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング