Bases de Svelte
Introduction
Bindings
Classes and styles
Advanced Svelte
Advanced reactivity
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
API routes
$app/state
Errors and redirects
Advanced SvelteKit
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(...)
:
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 :
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é :
$inspect(numbers).with(console.trace);
Modifier cette page sur Github
<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>