Skip to main content
Basic Svelte
Introduction
Reactivity
Props
Logic
Events
Bindings
Classes and styles
Actions
Transitions
Advanced Svelte
Advanced reactivity
Reusing content
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
Forms
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Hooks
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion

前回の演習では state が 再代入 に対してリアクティブになることを確認しましたが、それだけでなく、 ミューテーション(mutations) に対してもリアクティブです — 私たちはこれを ディープリアクティビティ(deep reactivity) と呼んでいます。

numbers をリアクティブな配列にしましょう:

App
let numbers = $state([1, 2, 3, 4]);

こうすると、この配列を変更するときに...

App
function addNumber() {
	numbers[numbers.length] = numbers.length + 1;
}

...コンポーネントが更新されます。また、代わりに配列に push することもできます:

App
function addNumber() {
	numbers.push(numbers.length + 1);
}

Deep reactivity は proxy を使用して実装されており、proxy に対するミューテーションは元のオブジェクトには影響しません。

Edit this page on GitHub

previous next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
	let numbers = [1, 2, 3, 4];
 
	function addNumber() {
		// TODO implement
	}
</script>
 
<p>{numbers.join(' + ')} = ...</p>
 
<button onclick={addNumber}>
	Add a number
</button>