Bases de Svelte
Introduction
Liaisons
Classes et styles
Svelte avancé
Réutiliser du contenu
Mouvements
Liaisons avancées
Transitions avancées
API de contexte
Éléments spéciaux
<script module>
Next steps
Bases de SvelteKit
Introduction
Routing
Chargement de données
En-têtes et cookies
Modules partagés
Formulaires
$app/state
Erreurs et redirections
SvelteKit avancé
Options de page
Options de lien
Routing avancé
Chargement avancé
Variables d’environnement
Conclusion
Lorsqu’un utilisateur ou une utilisatrice navigue d’une page à l’autre, SvelteKit exécute vos
fonctions load, mais uniquement si quelque chose a changé.
Dans cet exemple, naviguer entre les fuseaux horaires provoque la ré-exécution de la fonction load
de src/routes/[...timezone]/+page.js car params.timezone est invalidé. Mais la fonction load
de src/routes/+layout.js n’est pas ré-exécutée car du point de vue de SvelteKit, la navigation
n’a pas invalidé sa valeur.
Nous pouvons corriger cela en invalidant cette valeur manuellement en utilisant la fonction
invalidate(...), qui prend une URL et ré-exécute toute
fonction load qui en dépend. Puisque la fonction load de src/routes/+layout.js appelle
fetch('/api/now'), elle dépend de /api/now.
Dans src/routes/[...timezone]/+page.svelte, ajoutez un callback onMount qui exécute
invalidate('/api/now') une fois toutes les secondes :
<script>
import { onMount } from 'svelte';
import { invalidate } from '$app/navigation';
let { data } = $props();
onMount(() => {
const interval = setInterval(() => {
invalidate('/api/now');
}, 1000);
return () => {
clearInterval(interval);
};
});
</script>
<h1>
{new Intl.DateTimeFormat([], {
timeStyle: 'full',
timeZone: data.timezone
}).format(new Date(data.now))}
</h1><script lang="ts">
import { onMount } from 'svelte';
import { invalidate } from '$app/navigation';
let { data } = $props();
onMount(() => {
const interval = setInterval(() => {
invalidate('/api/now');
}, 1000);
return () => {
clearInterval(interval);
};
});
</script>
<h1>
{new Intl.DateTimeFormat([], {
timeStyle: 'full',
timeZone: data.timezone
}).format(new Date(data.now))}
</h1>Vous pouvez aussi passer une fonction à
invalidate, dans le cas où vous souhaiteriez invalider en fonction d’un motif particulier et non d’URLs spécifiques.
Modifier cette page sur Github