Skip to main content

<svelte:options> 要素はコンパイラのオプションを指定することができます。

例として immutable オプションを使用します。このアプリでは、新しいデータを受け取るたびに <Todo> コンポーネントが点滅します。アイテムの1つをクリックすると、更新された todos 配列が作成され、done 状態が切り替わります。これにより、他の <Todo> アイテムも点滅しますが、DOM は変更されません。

これを最適化するには、<Todo> コンポーネントに immutable データを期待するように指示します。これは、todo プロパティを 変更 しないことを約束していることを意味します。

これを Todo.svelte の先頭に追加します。

Todo.svelte
<svelte:options immutable={true} />

お好みであれば、これを <svelte:options immutable/> と短くしても構いません。

これで、Todos をクリックして切り替えると、更新されたコンポーネントだけが点滅するようになりました。

ここで設定できるオプションは

  • immutable={true} — 変更可能なデータは使用できません、コンパイラは値が変更されたかどうかを判断するために単純な参照等価性チェックを行うことができます
  • immutable={false} — デフォルトです。Svelteは、変更可能なオブジェクトが変更されたかどうかについて、より保守的になります
  • accessors={true} — コンポーネントのプロパティ(props)のゲッターとセッターを追加します
  • accessors={false} — デフォルトの値です
  • namespace="..." — このコンポーネントが使用される名前空間。最も一般的なものは "svg" です
  • customElement="..." — このコンポーネントをカスタム要素としてコンパイルする際に使用する名前です

これらのオプションの詳細については、API リファレンスを参照してください。

Next: <svelte:fragment>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<script>
	import Todo from './Todo.svelte';
 
	let todos = [
		{ id: 1, done: true, text: 'wash the car' },
		{ id: 2, done: false, text: 'take the dog for a walk' },
		{ id: 3, done: false, text: 'mow the lawn' }
	];
 
	function toggle(toggled) {
		todos = todos.map((todo) => {
			if (todo === toggled) {
				// return a new object
				return {
					id: todo.id,
					text: todo.text,
					done: !todo.done
				};
			}
 
			// return the same object
			return todo;
		});
	}
</script>
 
<div class="centered">
	<h1>todos</h1>
 
	<ul class="todos">
		{#each todos as todo (todo.id)}
			<Todo {todo} on:change={() => toggle(todo)} />
		{/each}
	</ul>
</div>
 
<style>
	.centered {
		max-width: 20em;
		margin: 0 auto;
	}
</style>
initialising