Kurs Svelte i SvelteKit · Moduł 1: Wprowadzenie do Svelte
Witaj w Krainie Wikingów!
W tej lekcji4
Witaj w Nordheim - krainie dzielnych wikingów! Jestem Jarl Sven Runiczny, władca wioski Svenheim i mistrz starożytnej sztuki run. Słyszałem, że chcesz poznać tajemnice Svelte - magicznej technologii, która przemienia kod w czystą moc.
Czym jest Svelte?
Svelte to framework JavaScript, ale nie taki jak inne. Jest jak wikińska kuźnia run - kompiluje Twój kod podczas budowania, zamiast interpretować go w przeglądarce.
Porównanie z innymi frameworkami
| Framework | Podejście | Analogia wikińska |
|---|---|---|
| React | Virtual DOM w runtime | Ciągłe sprawdzanie różnic - jak wartownik co chwilę budzący się |
| Vue | Reaktywność w runtime | Magiczne zaklęcia rzucane na bieżąco |
| Angular | Kompletny framework | Potężna armia z ciężkim ekwipunkiem |
| Svelte | Kompilacja | Runy wykute raz - działają wiecznie |
Svelte jest jak miecz wykuty przez najlepszego kowala - cała praca dzieje się w kuźni (kompilacji), a efekt to lekka, szybka broń (czysty JavaScript).
Historia Svelte
Rich Harris stworzył Svelte w 2016 roku. Nazwa pochodzi od angielskiego słowa oznaczającego "smukły, zgrabny" - dokładnie to, czym jest kod Svelte.
Kamienie milowe:
- 2016 - Svelte 1.0 - narodziny
- 2019 - Svelte 3 - rewolucja reaktywności (
$:) - 2023 - SvelteKit 2 - pełna moc fullstack
- 2024 - Svelte 5 - era Run (Runes):
$state,$derived,$effect - 2026 - SvelteKit 3 - konfiguracja w Vite i alias
#lib
W Nordheim uczysz się Svelte 5 i SvelteKit 3 - najnowszej magii run.
Dlaczego Svelte?
// React - musisz pamiętać o useState, useEffect...
const [count, setCount] = useState(0);
setCount(count + 1);
// Svelte 5 - zmienna z runą $state i zwykłe przypisanie
let count = $state(0);
count += 1;W Svelte piszesz mniej kodu, a on działa szybciej. Runa $state mówi kompilatorowi: "ta wartość żyje, odśwież ekran, gdy się zmieni". Resztę robi kuźnia. To jak różnica między ciężką zbroją a lekką kolczugą wikinga - mniejszy ciężar, większa efektywność.
Co Cię czeka w Nordheim?
Twoja podróż przez 14 lokacji:
- Midgard - Tu jesteś! Podstawy Svelte
- Yggdrasil - Komponenty jak gałęzie drzewa
- Komnata Run - Reaktywność i Runes
- Asgard - Props i Events
- Bifröst - Bindings
- Norny - Logika szablonów
- Walhalla - Cykl życia
- Studnia Mimir - Stores
- Ragnarök - Animacje i przejścia
- Mjölnir - Actions
- Drakkar - SvelteKit Routing
- Przepowiednie Wölvy - SSR i ładowanie danych
- Targ w Birce - Form Actions
- Straż Heimdalla - Hooks, API, Deployment
SKÅL! Ruszamy w drogę, wojowniku!
Kod do tej lekcji: App.svelte
<script>
// Welcome to Nordheim - Land of the Vikings!
// This is your first Svelte 5 component
// $state - values that change and refresh the screen
let vikingName = $state('Warrior');
let gold = $state(0);
// $derived - computed from gold, always up to date
let reputation = $derived(
gold >= 500 ? 'Legendary Jarl'
: gold >= 200 ? 'Respected Warrior'
: gold >= 50 ? 'Promising Viking'
: 'Young Drengr'
);
function raid() {
const loot = Math.floor(Math.random() * 50) + 10;
gold += loot;
}
</script>
<main class="viking-hall">
<header>
<h1>Viking Hall</h1>
<p class="subtitle">Nordheim - Svelte World</p>
</header>
<section class="welcome">
<h2>Welcome, {vikingName}!</h2>
<p>This is your first Svelte component - simple as a viking sword!</p>
<div class="input-group">
<label for="viking-name">Your name:</label>
<input id="viking-name" bind:value={vikingName} placeholder="Enter name..." />
</div>
</section>
<section class="stats">
<h3>Your stats</h3>
<div class="stat-grid">
<div class="stat">
<span class="label">Gold</span>
<span class="value">{gold}</span>
</div>
<div class="stat">
<span class="label">Reputation</span>
<span class="value">{reputation}</span>
</div>
</div>
<button onclick={raid} class="raid-btn">
Raiding expedition!
</button>
</section>
<footer>
<p>SKÅL! May Odin be with you!</p>
</footer>
</main>
<style>
.viking-hall {
font-family: 'Georgia', serif;
max-width: 600px;
margin: 0 auto;
padding: 2rem;
background: linear-gradient(135deg, #1a0f0a 0%, #2c1810 100%);
min-height: 100vh;
color: #e8d5b7;
}
header {
text-align: center;
border-bottom: 2px solid #d4af37;
padding-bottom: 1rem;
margin-bottom: 2rem;
}
h1 {
color: #d4af37;
font-size: 2rem;
margin: 0;
}
.subtitle {
color: #8b7355;
font-style: italic;
}
section {
background: rgba(212, 175, 55, 0.1);
border: 1px solid #d4af37;
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1.5rem;
}
h2, h3 {
color: #d4af37;
margin-top: 0;
}
.input-group {
margin-top: 1rem;
}
label {
display: block;
margin-bottom: 0.5rem;
color: #d4af37;
}
input {
width: 100%;
padding: 0.75rem;
border: 2px solid #d4af37;
background: rgba(0,0,0,0.3);
color: #e8d5b7;
border-radius: 4px;
font-size: 1rem;
}
input:focus {
outline: none;
box-shadow: 0 0 10px rgba(212, 175, 55, 0.5);
}
.stat-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin-bottom: 1rem;
}
.stat {
background: rgba(0,0,0,0.3);
padding: 1rem;
border-radius: 4px;
text-align: center;
}
.stat .label {
display: block;
color: #8b7355;
font-size: 0.9rem;
}
.stat .value {
display: block;
font-size: 1.25rem;
color: #d4af37;
margin-top: 0.5rem;
}
.raid-btn {
width: 100%;
padding: 1rem;
font-size: 1.25rem;
background: linear-gradient(135deg, #8b0000 0%, #a52a2a 100%);
color: white;
border: 2px solid #d4af37;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s;
}
.raid-btn:hover {
background: linear-gradient(135deg, #a52a2a 0%, #cd5c5c 100%);
transform: scale(1.02);
}
footer {
text-align: center;
color: #8b7355;
border-top: 1px solid #3d2914;
padding-top: 1rem;
}
</style>Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Co wyróżnia Svelte spośród innych frameworków JavaScript?
2. Kto stworzył Svelte i w którym roku powstała pierwsza wersja?