Skip to main content
Bases de Svelte
Introduction
Réactivité
Props
Logique
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

Il est souvent utile d’être capable de suivre la valeur d’un morceau d’état lorsqu’évolue dans le temps.

Dans la fonction addNumber, nous avons ajouté une déclaration console.log. Mais si vous cliquez sur le bouton et ouvrez la console (en utilisant le bouton sur la droite de la barre d’URL), vous verrez un warning, et un message expliquant que le message n’a pas pu être cloné.

La raison est que numbers est un proxy réactif. Il y a deux possibilités pour résoudre cette situation. D’abord, nous pouvons créer un snapshot non réactif de l’état avec $state.snapshot(...) :

App
function addNumber() {
	numbers.push(numbers.length + 1);
	console.log($state.snapshot(numbers));
}

Il est également possible d’utiliser la rune $inspect pour automatiquement logguer un snapshot de l’état à chaque fois qu’il change. Ce code sera automatiquement exclu de votre build de production :

App
function addNumber() {
	numbers.push(numbers.length + 1);
	console.log($state.snapshot(numbers));
}

$inspect(numbers);

Vous pouvez personnaliser la manière dont l’information est affichée en utilisant $inspect(...).with(fn) — par exemple, vous pouvez utiliser console.trace pour vérifier l’endroit où le changement d’état a été initié :

App
$inspect(numbers).with(console.trace);

Modifier cette page sur Github

précédent suivant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
	let numbers = $state([1, 2, 3, 4]);
	let total = $derived(numbers.reduce((t, n) => t + n, 0));
 
	function addNumber() {
		numbers.push(numbers.length + 1);
		console.log(numbers);
	}
</script>
 
<p>{numbers.join(' + ')} = {total}</p>
 
<button onclick={addNumber}>
	Ajouter un nombre
</button>