Bases de Svelte
Introduction
Liaisons
Classes et styles
Svelte avancé
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
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Page options
Link options
Advanced routing
Advanced loading
Environment variables
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>