Kurs Svelte i SvelteKit · Moduł 1: Wprowadzenie do Svelte

Witaj w Krainie Wikingów!

3 min czytania ·
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

FrameworkPodejścieAnalogia wikińska
ReactVirtual DOM w runtimeCiągłe sprawdzanie różnic - jak wartownik co chwilę budzący się
VueReaktywność w runtimeMagiczne zaklęcia rzucane na bieżąco
AngularKompletny frameworkPotężna armia z ciężkim ekwipunkiem
SvelteKompilacjaRuny 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:

  1. Midgard - Tu jesteś! Podstawy Svelte
  2. Yggdrasil - Komponenty jak gałęzie drzewa
  3. Komnata Run - Reaktywność i Runes
  4. Asgard - Props i Events
  5. Bifröst - Bindings
  6. Norny - Logika szablonów
  7. Walhalla - Cykl życia
  8. Studnia Mimir - Stores
  9. Ragnarök - Animacje i przejścia
  10. Mjölnir - Actions
  11. Drakkar - SvelteKit Routing
  12. Przepowiednie Wölvy - SSR i ładowanie danych
  13. Targ w Birce - Form Actions
  14. 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. 1. Co wyróżnia Svelte spośród innych frameworków JavaScript?

  2. 2. Kto stworzył Svelte i w którym roku powstała pierwsza wersja?

Przydatne artykuły