【Svelte】Storeで状態を管理する
目次
はじめに
タイムテーブルメーカーという、1日のタイムテーブルを手軽に作成できるツールを作りました。
Astroのサイト内にSvelteのコンポーネントを設置して実装しています。 その際にコンポーネント間で状態を共有する必要が出てきたので、SvelteのStore機能を使った方法が簡単だったので紹介します。
Storeとは
StoreとはSvelteの組み込みの状態管理のための機能です。
writable
, readable
, derived
という3つの関数を使って複数のコンポーネント間で共有するストアを作成し、監視・更新するための仕組みを提供します。
これにより、アプリケーション内でのデータフローを効率的に管理することができます。
writable()
外のコンポーネントから書き換えが可能なストアを作成します。
readable()
外のコンポーネントからは書き換えができない読み取り専用のストアを作成します。
drived()
他のストアから計算される値を表します。たとえば、2つの数値の合計を保持するストアを作成し、その値が変更されたときに自動的に再計算されるストアを作成することができます。
実際の使い方
ストアを作成したら、外のコンポーネントでインポートします。ストアの値は、$変数名
とすることで使用することができます。
また、writable
なストアは.set()
や.update()
などのメソッドで中身を更新することもできます。
// store.js ストアを作成する
import { writable, derived } from 'svelte/store'
// Writable storeを作成、(0)は初期値
export const count = writable(0)
// Derived storeを作成
export const doubleCount = derived(count, ($count) => $count * 2)
<script>
import { count, doubleCount } from './store.js'
// storeの更新
count.set(10)
</script>
// App.svelte ストアを使用する
<h1>{$count}</h1>
<p>Double Count: {$doubleCount}</p>
上記の例では、doubleCount
がderived
で定義されていてcount
の値に依存しているので、count
が更新されるたびにdoubleCount
の値もリアルタイムで変更されます。
おわりに
まだ複雑なことはしていませんが、Svelteの状態管理はシンプルで使いやすかったです。
以上