Kurs Svelte i SvelteKit · Moduł 2: Komponenty
Zagnieżdżanie komponentów
W tej lekcji3
Tak jak Yggdrasil ma gałęzie, a te mają mniejsze gałązki, tak komponenty Svelte mogą zawierać inne komponenty.
Przykład: Struktura wioski wikingów
VikingVillage (korzeń)
├── TownHall
│ ├── ChiefRoom
│ └── MeetingHall
├── Barracks
│ ├── Warrior
│ ├── Warrior
│ └── Warrior
├── Blacksmith
│ └── Forge
└── Harbor
├── Ship
└── ShipImplementacja
<!-- VikingVillage.svelte -->
<script>
import TownHall from './TownHall.svelte';
import Barracks from './Barracks.svelte';
import Blacksmith from './Blacksmith.svelte';
import Harbor from './Harbor.svelte';
let villageName = 'Svenheim';
</script>
<div class="village">
<h1>Wioska: {villageName}</h1>
<TownHall />
<Barracks />
<Blacksmith />
<Harbor />
</div>
<style>
.village {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
padding: 2rem;
}
</style><!-- Barracks.svelte -->
<script>
import Warrior from './Warrior.svelte';
let warriors = ['Ragnar', 'Bjorn', 'Ivar', 'Ubbe'];
</script>
<div class="barracks">
<h2>Koszary</h2>
{#each warriors as name}
<Warrior {name} />
{/each}
</div>Zapis <Warrior {name} /> to skrót od <Warrior name={name} />. Komponent Warrior odbiera tę wartość runą $props():
<!-- Warrior.svelte -->
<script>
let { name } = $props();
</script>
<div class="warrior">
<span class="icon">ᛏ</span>
<span class="name">{name}</span>
</div>
<style>
.warrior {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem;
background: #3d2914;
border-radius: 4px;
margin: 0.25rem 0;
}
</style>Dobre praktyki zagnieżdżania
- Jeden komponent = jedna odpowiedzialność
- Nie zagnieżdżaj zbyt głęboko (max 3-4 poziomy)
- Wydzielaj powtarzalne elementy do osobnych komponentów
- Nazywaj komponenty jasno - co robią, nie jak wyglądają
Kod do tej lekcji: App.svelte
<script>
// Nesting components - like branches of Yggdrasil
import VikingVillage from './VikingVillage.svelte';
</script>
<VikingVillage name="Kattegat" />
<style>
:global(body) {
margin: 0;
background: #0a0a0a;
}
</style>Hasła z dokumentacji w tej lekcji
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Jak w SvelteKit 3 zaimportować komponent z katalogu src/lib przez alias?
Zadania praktyczne w grze
- Edytor kodu
Uzupełnij kod importując komponent Warrior i używając go w markup