Vuex ·
Pinia ·
State ·
Getters ·
Actions ·
Modules / Stores
Vuex war der offizielle State-Manager für Vue 2. Pinia ist der moderne Nachfolger für Vue 3 und bietet eine einfachere, typsicherere API. Diese Cheatsheet zeigt beide im Vergleich.
Vuex ist der klassische State-Manager für Vue. Er folgt einem strikten Flux-Pattern mit State (Daten), Mutations (synchrone Änderungen), Actions (asynchrone Operationen) und Getters (abgeleitete Werte).
| Konzept | Beschreibung | Zugriff in Komponente |
|---|---|---|
| State | Zentraler Zustand (Daten) | $store.state.count |
| Getters | Abgeleitete Werte (cached) | $store.getters.doubleCount |
| Mutations | Synchrone Zustandsänderungen | $store.commit('increment') |
| Actions | Asynchrone Operationen | $store.dispatch('incrementAsync') |
| Modules | Aufteilung in Unter-Stores | $store.state.moduleName |
Pinia ist der moderne Nachfolger von Vuex für Vue 3. Es bietet eine einfachere API, bessere TypeScript-Unterstützung und benötigt keine Mutations mehr – Actions können sowohl synchron als auch asynchron sein.
| Merkmal | Vuex | Pinia |
|---|---|---|
| Mutations | Erforderlich | Nicht erforderlich |
| Actions | Nur asynchron | Synchon & asynchron |
| TypeScript | Eingeschränkt | Native Unterstützung |
| Store-Struktur | Module | Mehrere Stores |
| Devtools | Unterstützt | Unterstützt |
| Vue-Version | Vue 2 & 3 | Vue 3 (auch Vue 2 mit Plugin) |
State enthält die zentralen Daten. Getters sind abgeleitete Werte, die automatisch aktualisiert werden. In Komponenten können Sie mit mapState (Vuex) oder storeToRefs (Pinia) auf sie zugreifen.
storeToRefs in Pinia, um Reaktivität zu erhalten – sonst gehen reaktive Updates verloren. In Vuex bieten mapState und mapGetters die gleiche Funktionalität.
Actions sind für asynchrone Operationen und das Committen von Mutations (Vuex) oder direkte State-Änderungen (Pinia) verantwortlich. Sie können auch andere Actions aufrufen.
commit für State-Änderungen verwenden.
Module (Vuex) und Stores (Pinia) ermöglichen die Aufteilung des State-Managements in logische Einheiten – ideal für große Anwendungen mit vielen Domänen.
namespaced: true in Vuex, um Kollisionen bei Actions und Getters zu vermeiden.
Vuex
Pinia
state
getters
actions
modules
$store.commit('mutation') ·
$store.dispatch('action') ·
useCounterStore()