Svelte 5 vs Svelte 4: A Comprehensive Comparison
This website is powered by ItGalaxy.io
In this article, we’ll explore the key differences between Svelte 5 and Svelte 4, focusing on reactivity, templating, component composition, and other core features. Svelte 5 introduces significant changes to reactivity with its new runes system while maintaining the simplicity and efficiency that Svelte is known for.
Table of Contents
- Reactivity
- Templating
- Component Composition
- Form Handling
- Lifecycle Management
- Context and State Management
- Web App Features
Reactivity
The most significant change in Svelte 5 is the introduction of runes for reactivity management.
Declaring State
Svelte 5
<script>
let name = $state("John");
</script>
<h1>Hello {name}</h1>
Svelte 4
<script>
let name = "John";
</script>
<h1>Hello {name}</h1>
Updating State
Svelte 5
<script>
let name = $state("John");
name = "Jane";
</script>
<h1>Hello {name}</h1>
Svelte 4
<script>
let name = "John";
name = "Jane";
</script>
<h1>Hello {name}</h1>
Computed State
Svelte 5
<script>
let count = $state(10);
const doubleCount = $derived(count * 2);
</script>
<div>{doubleCount}</div>
Svelte 4
<script>
let count = 10;
$: doubleCount = count * 2;
</script>
<div>{doubleCount}</div>
Templating
Basic Templates
Both versions maintain similar templating syntax:
Svelte 5 & 4
<h1>Hello world</h1>
Styling
CSS styling remains consistent across versions:
<h1 class="title">I am red</h1>
<button style="font-size: 10rem;">I am a button</button>
<style>
.title {
color: red;
}
</style>
Loops
The iteration syntax remains unchanged:
<script>
const colors = ["red", "green", "blue"];
</script>
<ul>
{#each colors as color (color)}
<li>{color}</li>
{/each}
</ul>
Event Handling
Svelte 5
<script>
let count = $state(0);
function incrementCount() {
count++;
}
</script>
<p>Counter: {count}</p>
<button onclick={incrementCount}>+1</button>
Svelte 4
<script>
let count = 0;
function incrementCount() {
count++;
}
</script>
<p>Counter: {count}</p>
<button on:click={incrementCount}>+1</button>
Component Composition
Props
Props handling remains similar in both versions:
<UserProfile
name="John"
age={20}
favouriteColors={["green", "blue", "red"]}
isAvailable
/>
Event Emission
Svelte 5
<script>
let isHappy = $state(true);
function onAnswerNo() {
isHappy = false;
}
function onAnswerYes() {
isHappy = true;
}
</script>
<AnswerButton onYes={onAnswerYes} onNo={onAnswerNo} />
Svelte 4
<script>
let isHappy = true;
function onAnswerNo() {
isHappy = false;
}
function onAnswerYes() {
isHappy = true;
}
</script>
<AnswerButton on:yes={onAnswerYes} on:no={onAnswerNo} />
Form Handling
Text Input
Svelte 5
<script>
let text = $state("Hello World");
</script>
<input bind:value={text} />
Svelte 4
<script>
let text = "Hello World";
</script>
<input bind:value={text} />
Checkboxes
Svelte 5
<script>
let isAvailable = $state(false);
</script>
<input type="checkbox" bind:checked={isAvailable} />
Svelte 4
<script>
let isAvailable = false;
</script>
<input type="checkbox" bind:checked={isAvailable} />
Lifecycle Management
Component Mounting
Svelte 5
<script>
let pageTitle = $state("");
$effect(() => {
pageTitle = document.title;
});
</script>
Svelte 4
<script>
import { onMount } from "svelte";
let pageTitle = "";
onMount(() => {
pageTitle = document.title;
});
</script>
Cleanup
Svelte 5
<script>
let time = $state(new Date().toLocaleTimeString());
$effect(() => {
const timer = setInterval(() => {
time = new Date().toLocaleTimeString();
}, 1000);
return () => clearInterval(timer);
});
</script>
Svelte 4
<script>
import { onDestroy } from "svelte";
let time = new Date().toLocaleTimeString();
const timer = setInterval(() => {
time = new Date().toLocaleTimeString();
}, 1000);
onDestroy(() => clearInterval(timer));
</script>
Context and State Management
Context API
Svelte 5
<script>
import { setContext } from "svelte";
const user = createUserState({
id: 1,
username: "unicorn42"
});
setContext("user", user);
</script>
Svelte 4
<script>
import { setContext } from "svelte";
const userStore = createUserStore({
id: 1,
username: "unicorn42"
});
setContext("user", userStore);
</script>
Web App Features
Data Fetching
Svelte 5
<script>
const response = useFetchUsers();
</script>
{#if response.isLoading}
<p>Loading...</p>
{:else if response.error}
<p>Error: {response.error}</p>
{:else}
<ul>
{#each response.users as user}
<li>{user.name}</li>
{/each}
</ul>
{/if}
Svelte 4
<script>
const { isLoading, error, data: users } = useFetchUsers();
</script>
{#if $isLoading}
<p>Loading...</p>
{:else if $error}
<p>Error: {$error}</p>
{:else}
<ul>
{#each $users as user}
<li>{user.name}</li>
{/each}
</ul>
{/if}
Key Differences Summary
-
Reactivity System
- Svelte 5 introduces
$state
and$derived
runes - Svelte 4 uses reactive declarations with
$:
- Svelte 5 introduces
-
Effects
- Svelte 5 uses
$effect
for side effects - Svelte 4 uses lifecycle functions (
onMount
,onDestroy
)
- Svelte 5 uses
-
Event Handling
- Svelte 5 uses
onclick
style events - Svelte 4 uses
on:click
style events
- Svelte 5 uses
-
State Management
- Svelte 5 simplifies state with runes
- Svelte 4 relies on reactive assignments
Conclusion
Svelte 5 represents a significant evolution in Svelte’s reactivity system while maintaining the framework’s core principles of simplicity and efficiency. The introduction of runes provides a more explicit and intuitive way to handle state and side effects, though it may require some adjustment for developers familiar with Svelte 4’s reactive declarations.
Key considerations when choosing between versions:
-
Svelte 5
- More explicit reactivity with runes
- Simplified effect management
- Modern event handling syntax
- Better TypeScript integration
-
Svelte 4
- Mature ecosystem
- Familiar reactive declarations
- Established patterns
- Stable production usage
The choice between Svelte 5 and 4 often depends on project requirements and team familiarity. Svelte 5’s runes system offers a more intuitive approach to reactivity, while Svelte 4 provides a battle-tested solution with a mature ecosystem.
Decouvrez plus d’Offres de la plateform ItGalaxy.io :
Découvrez notre gamme complète de services et formations pour accélérer votre carrière.
1. Nous contactez
- Description: Besoin de Formation et des Solutions cloud complètes pour vos applications
- Links:
2. Infra as a Service
- Description: Infrastructure cloud évolutive et sécurisée
- Links:
3. Projets Développeurs
- Description: Découvrez des opportunités passionnantes pour les développeurs
- Links:
4. Développeurs
- Description: Rejoignez notre communauté de développeurs
- Links:
5. Formations Complètes
- Description: Accédez à des formations professionnelles de haute qualité
- Links:
6. Marketplace
- Description: Découvrez notre place de marché de services
- Links:
7. Blogs
- Description: Découvrez nos blogs
- Links:
- comment creer une application mobile ?
- Comment monitorer un site web ?
- Command Checkout in git ?
- Comment git checkout to commit ?
- supprimer une branche git
- dockercoin
- kubernetes c est quoi
- architecture kubernetes
- Installer Gitlab Runner ?
- .gitlab-ci.yml exemples
- CI/CD
- svelte 5 vs solid
- svelte vs lit
- solidjs vs qwik
- alpine vs vue
- Plateform Freelance 2025
- Creation d’un site Web gratuitement
This website is powered by ItGalaxy.io