メインコンテンツへスキップ

前の演習では、コンポーネント内でリアクティビティを追加するためにruneを使用しました。しかし、グローバルなステートを共有するために、コンポーネントの*外部*でもruneを使用できます。

この演習の<Counter>コンポーネントはすべて、shared.jsからcounterオブジェクトをインポートしています。しかし、これは通常のオブジェクトであり、ボタンをクリックしても何も起こりません。オブジェクトを$state(...)でラップしてください。

共有
export const counter = $state({
	count: 0
});

通常の.jsファイルではruneを使用できず、.svelte.jsファイルでのみ使用できるため、エラーが発生します。これを修正しましょう — ファイル名をshared.svelte.jsに変更します。

次に、Counter.svelteのインポート宣言を更新します。

カウンター
<script>
	import { counter } from './shared.svelte.js';
</script>

これで、いずれかのボタンをクリックすると、3つすべてが同時に更新されます。

宣言が(単にミューテートされるのではなく)再割り当てされた場合、インポーターがそれを知る方法がないため、モジュールから$state宣言をエクスポートすることはできません。

GitHubでこのページを編集する

1
2
3
4
5
6
7
8
<script>
	import Counter from './Counter.svelte';
</script>
 
<Counter />
<Counter />
<Counter />