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
Par commodité, les snippets déclarés directement au sein du composant deviennts des props sur ce
composant. Prenez les snippets header
et row
et déplacez les dans <FilteredList>
:
App
<FilteredList
data={colors}
field="name"
{header}
{row}
>
{#snippet header()}...{/snippet}
{#snippet row(d)}...{/snippet}
</FilteredList>
{#snippet header()}...{/snippet}
{#snippet row(d)}...{/snippet}
Nous pouvons alors les supprimer des props passées explicitement :
App
<FilteredList data={colors} field="name" {header} {row}>
{#snippet header()}...{/snippet}
{#snippet row(d)}...{/snippet}
</FilteredList>
Tout contenu au sein d’un composant qui ne fait pas partie d’un snippet déclaré devient un snippet
spécial appelé children
. Puisque header
n’a pas de paramètres, nous pouvons le transformer en
children
en supprimant les balises de snippet...
App
{#snippet header()}
<header>
<span class="color"></span>
<span class="name">nom</span>
<span class="hex">hex</span>
<span class="rgb">rgb</span>
<span class="hsl">hsl</span>
</header>
{/snippet}
... et en renommant la prop header
en children
de l’autre côté :
FilteredList
<script>
let { data, field, children, row } = $props();
// ...
</script>
<script lang="ts">
let { data, field, children, row } = $props();
// ...
</script>
FilteredList
<div class="header">
{@render children()}
</div>
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<script>
import FilteredList from './FilteredList.svelte';
import { colors } from './data.js';
</script>
<FilteredList
data={colors}
field="name"
{header}
{row}
></FilteredList>
{#snippet header()}
<header>
<span class="color"></span>
<span class="name">nom</span>
<span class="hex">hex</span>
<span class="rgb">rgb</span>
<span class="hsl">hsl</span>
</header>
{/snippet}
{#snippet row(d)}
<div class="row">
<span class="color" style="background-color: {d.hex}"></span>
<span class="name">{d.name}</span>
<span class="hex">{d.hex}</span>
<span class="rgb">{d.rgb}</span>
<span class="hsl">{d.hsl}</span>
</div>
{/snippet}
<style>
header, .row {
display: grid;
align-items: center;
grid-template-columns: 2em 4fr 3fr;
gap: 1em;
padding: 0.1em;
background: var(--bg-1);
border-radius: 0.2em;
}
header {
font-weight: bold;
}
.row:hover {
background: var(--bg-2);
}
.color {
aspect-ratio: 1;
height: 100%;
border-radius: 0.1em;
}
.rgb, .hsl {
display: none;
}
@media (min-width: 40rem) {
header, .row {
grid-template-columns: 2em 4fr 3fr 3fr;
}
.rgb {
display: block;
}
}
@media (min-width: 60rem) {
header, .row {
grid-template-columns: 2em 4fr 3fr 3fr 3fr;
}
.hsl {
display: block;
}
}
</style>