Skip to main content
Bases de Svelte
Introduction
Réactivité
Props
Logique
Évènements
Liaisons
Classes et styles
Actions
Transitions
Svelte avancé
Réactivité avancée
Réutiliser du contenu
Mouvements
Liaisons avancées
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

Les snippets vous permettent de réutiliser du contenu au sein d’un composant, sans avoir besoin de l’extraire dans un fichier séparé.

Dans cet exercice, nous créons un tableau de trois singes sages, avec leur séquence d’échappement unicode et leur entité HTML. Nous n’avons pour le moment qu’un seul singe.

Bien sûr, nous pourrions dupliquer le markup. Ou bien nous pourrions créer un tableau d’objets { emoji, description } et le passer à un bloc {#each ...}. Mais une meilleure solution est d’encapsuler le markup dans un block réutilisable.

Commencez par déclarer un snippet :

App
{#snippet monkey()}
	<tr>
		<td>{emoji}</td>
		<td>{description}</td>
		<td>\u{emoji.charCodeAt(0).toString(16)}\u{emoji.charCodeAt(1).toString(16)}</td>
		<td>&amp#{emoji.codePointAt(0)}</td>
	</tr>
{/snippet}

Le singe n’est plus visible, car nous n’avons pas encore rendu le snippet. Faisons-le maintenant :

App
<tbody>
	{#snippet monkey()}...{/snippet}

	{@render monkey()}
</tbody>

Avant de pouvoir réutiliser le snippet pour le reste de nos singes, nous devons passer des données au snippet. Les snippets peuvent ne pas avoir d’arguments, ou bien en avoir, sans limite de nombre :

App
<tbody>
	{#snippet monkey(emoji, description)}...{/snippet}

	{@render monkey('🙈', 'ne pas voir')}
</tbody>

Vous pouvez aussi déstructurer les arguments, si vous préfèrez.

Ajoutez le reste des singes :

  • '🙈', 'ne pas voir'
  • '🙉', 'ne pas entendre'
  • '🙊', 'ne pas parler'

Enfin, supprimez le bloc <script>, car il ne sert plus à rien :

App
<script>
	let emoji = '🙈';
	let description = 'ne pas voir';
</script>
<script lang="ts">
	let emoji = '🙈';
	let description = 'ne pas voir';
</script>

Les snippets peuvent être déclarés n’importe où dans votre composant, mais, comme les fonctions, ils ne sont accessibles par les balises de rendu que dans le même “scope” ou un scope enfant.

Modifier cette page sur Github

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
<script>
	let emoji = '🙈';
	let description = 'ne pas voir';
</script>
 
<table>
	<thead>
		<tr>
			<th>emoji</th>
			<th>description</th>
			<th>séquence d'échappement unicode</th>
			<th>entité html</th>
		</tr>
	</thead>
 
	<tbody>
		<tr>
			<td>{emoji}</td>
			<td>{description}</td>
			<td>\u{emoji.charCodeAt(0).toString(16)}\u{emoji.charCodeAt(1).toString(16)}</td>
			<td>&amp#{emoji.codePointAt(0)}</td>
		</tr>
	</tbody>
</table>
 
<style>
	th, td {
		padding: 0.5em;
	}
 
	td:nth-child(3),
	td:nth-child(4) {
		font-family: monospace;
	}
</style>