$state — reaktiver Zustand
Die wichtigste Rune: aus einer normalen Variable wird reaktiver Zustand, der die Oberfläche automatisch aktualisiert.
Was ist eine Rune?
Runes sind spezielle Symbole mit einem $-Präfix, die Svelte 5
dem Compiler als Anweisungen gibt. $state ist die grundlegendste: Sie macht aus
einer Variable reaktiven Zustand. Ändert sich der Wert, aktualisiert Svelte
automatisch jede Stelle im Markup, die ihn verwendet.
<script>
let count = $state(0);
</script>
<button onclick={() => count++}>
Geklickt: {count}
</button>Kein setState, kein .value, kein ref() — du änderst die
Variable ganz normal (count++), und die Oberfläche folgt.
🛤️ Rails-Vergleich: Instance-Variable vs. reaktiver State
In Rails ist @count ein Snapshot zum Request-Zeitpunkt. In
Svelte lebt $state im Browser weiter und reagiert auf jede Änderung — ohne
neuen Request.
# Rails: @variable wird EINMAL gesetzt und gerendert
class DashboardController < ApplicationController
def show
@count = Order.count # Snapshot zum Request-Zeitpunkt
# Ändert sich etwas, muss die Seite neu geladen werden
end
endLive ausprobieren
Der folgende Zähler ist echter $state-Code aus dieser Seite:
Der Wert steht auf 0 — die Anzeige aktualisiert sich, sobald du klickst.
Objekte und Arrays
$state funktioniert nicht nur mit Zahlen, sondern auch mit Objekten und Arrays —
und zwar tief: Auch verschachtelte Änderungen und Array-Methoden wie push werden erkannt.
let user = $state({ name: 'Anna', punkte: 0 });
// Einfach mutieren — Svelte verfolgt auch verschachtelte Änderungen:
user.punkte += 10;
user.name = 'Bob';let todos = $state([]);
todos.push('Milch kaufen'); // ✅ reaktiv
todos[0] = 'Brot kaufen'; // ✅ reaktiv
todos.length = 0; // ✅ auch dasNoch keine Einträge — füge etwas hinzu.
Zusammenfassung
💡 Das Wichtigste
$state(wert)macht eine Variable reaktiv.- Du änderst sie wie eine normale Variable — kein Setter nötig.
- Reaktivität ist tief: Objekte, Arrays und Mutationen inklusive.
🎯 Probier es selbst
Erweitere den Zähler-Demo um einen „Zurücksetzen"-Button, der count = 0 setzt.
Beobachte, dass keine weitere Verdrahtung nötig ist.