# Vue 3 Composition API: Der vollständige Leitfaden zur Reaktivität > Die Vue 3 Composition API praxisnah erklärt: ref, reactive, computed, watch und Composables für leistungsstarke Vue-Anwendungen. - Published: 2026-01-07 - Updated: 2026-04-06 - Author: SharpSkill - Tags: vue 3, composition api, javascript, frontend, reactivity - Reading time: 12 min --- Die Vue 3 Composition API stellt einen grundlegenden Wandel in der Strukturierung von Vue-Komponenten dar. Dieser Ansatz organisiert Code nach Funktionalität statt nach Optionen, was die Wiederverwendung von Logik und die Wartung komplexer Anwendungen deutlich vereinfacht. > **Voraussetzungen** > > Dieser Leitfaden setzt Grundkenntnisse in Vue.js voraus. Alle Beispiele verwenden die mit Vue 3.2 eingeführte ` ``` Für Objekte mit mehreren zusammenhängenden Eigenschaften bietet `reactive` eine natürlichere Syntax, bei der `.value` nicht benötigt wird. ```javascript // UserProfile.vue ``` Als Faustregel gilt: `ref` für primitive Werte (String, Number, Boolean) und `reactive` für strukturierte Objekte verwenden. ## Berechnete Eigenschaften mit computed Berechnete Eigenschaften leiten Werte aus dem reaktiven Zustand ab. Sie werden gecacht und nur dann neu berechnet, wenn sich ihre Abhängigkeiten ändern, was sie besonders performant macht. ```javascript // ProductList.vue ``` Berechnete Eigenschaften können auch beschreibbar sein, mit einem Getter und Setter. Das ist nützlich für bidirektionale Transformationen. ```javascript // FullName.vue ``` ## Watchers mit watch und watchEffect Watchers führen Seiteneffekte als Reaktion auf Datenänderungen aus. Vue 3 bietet zwei Ansätze: `watch` für präzise Kontrolle und `watchEffect` für automatische Nachverfolgung. > **Wann watch und wann watchEffect verwenden?** > > `watch` bietet präzise Kontrolle über Abhängigkeiten und stellt sowohl den alten als auch den neuen Wert bereit. `watchEffect` ist einfacher, wenn alle verwendeten reaktiven Abhängigkeiten den Effekt auslösen sollen. ```javascript // SearchComponent.vue ``` Um verschachtelte Objekte oder Arrays zu beobachten, ist bei `watch` die Option `deep` erforderlich. ```javascript // DeepWatch.vue ``` ## Wiederverwendbare Composables erstellen Composables sind Funktionen, die wiederverwendbare reaktive Logik kapseln. Dieser Ansatz ist eine der größten Stärken der Composition API, wenn es darum geht, Code zwischen Komponenten zu teilen. ```javascript // composables/useFetch.js import { ref, watchEffect, toValue } from 'vue' // Composable for HTTP requests // Automatically handles loading, errors, and refetching export function useFetch(url) { const data = ref(null) const error = ref(null) const isLoading = ref(false) // Reusable fetch function async function fetchData() { isLoading.value = true error.value = null try { // toValue() allows accepting a ref or a value const response = await fetch(toValue(url)) if (!response.ok) { throw new Error(`HTTP ${response.status}`) } data.value = await response.json() } catch (e) { error.value = e.message } finally { isLoading.value = false } } // watchEffect for automatic refetch if url is a ref watchEffect(() => { fetchData() }) // Expose state and methods return { data, error, isLoading, refetch: fetchData } } ``` Dieses Composable lässt sich anschließend deklarativ in jeder beliebigen Komponente einsetzen. ```javascript // UserList.vue ``` Ein weiteres Beispiel zeigt ein Composable zur Verwaltung des Formularzustands mit Validierung. ```javascript // composables/useForm.js import { reactive, computed } from 'vue' // Form management composable export function useForm(initialValues, validationRules) { // Form state const form = reactive({ values: { ...initialValues }, errors: {}, touched: {} }) // Validate a specific field const validateField = (field) => { const rules = validationRules[field] if (!rules) return true for (const rule of rules) { const result = rule(form.values[field]) if (result !== true) { form.errors[field] = result return false } } form.errors[field] = null return true } // Validate entire form const validate = () => { let isValid = true for (const field in validationRules) { if (!validateField(field)) { isValid = false } } return isValid } // computed: form is valid if no errors const isValid = computed(() => { return Object.values(form.errors).every(e => !e) }) // Mark a field as touched (to display errors) const touch = (field) => { form.touched[field] = true validateField(field) } // Reset the form const reset = () => { form.values = { ...initialValues } form.errors = {} form.touched = {} } return { form, isValid, validate, validateField, touch, reset } } ``` ## Lifecycle-Hooks verwalten Die Composition API stellt Lifecycle-Hooks als Funktionen bereit, die innerhalb von Setup aufgerufen werden. Diese Hooks führen Code zu bestimmten Zeitpunkten im Lebenszyklus der Komponente aus. > **Aufräumen nicht vergessen** > > Seiteneffekte (Timer, Event-Listener, Subscriptions) sollten immer in `onUnmounted` bereinigt werden, um Speicherlecks zu vermeiden. ```javascript // LifecycleDemo.vue ``` ## Template Refs und DOM-Zugriff Template Refs ermöglichen direkten Zugriff auf DOM-Elemente oder Instanzen von Kindkomponenten. Das bleibt nützlich für Fälle, in denen direkte Manipulation erforderlich ist. ```javascript // InputFocus.vue ``` ## Kommunikation zwischen Eltern- und Kindkomponenten mit Props und Emits Die Composition API modernisiert die Deklaration von Props und Events mit `defineProps` und `defineEmits` und bietet dabei eine verbesserte TypeScript-Integration. ```javascript // ChildComponent.vue ``` ```javascript // ParentComponent.vue ``` ## Provide und Inject für Dependency Injection Um Daten zwischen weit entfernten Komponenten ohne Prop Drilling zu teilen, bietet Vue 3 `provide` und `inject` an. ```javascript // App.vue (or an ancestor component) ``` ```javascript // DeepNestedComponent.vue (anywhere in the tree) ``` ## Fazit Die Vue 3 Composition API bietet einen leistungsstarken und flexiblen Ansatz zur Organisation von Code in Vue-Anwendungen. Die wichtigsten Konzepte im Überblick: - **ref** für primitive Werte, **reactive** für komplexe Objekte - **computed** für abgeleitete Werte mit automatischem Caching - **watch** und **watchEffect** für reaktive Seiteneffekte - **Composables** zum Extrahieren und Wiederverwenden von Logik zwischen Komponenten - **Funktionale Lifecycle-Hooks** (`onMounted`, `onUnmounted`, etc.) - **provide/inject** für Dependency Injection ohne Prop Drilling Dieser Ansatz erleichtert die Entwicklung wartbarer und testbarer Anwendungen und bietet gleichzeitig eine hervorragende TypeScript-Integration. Der nächste Schritt besteht darin, fortgeschrittene Patterns wie asynchrone Composables und die Integration mit Pinia für globales State Management zu erkunden. --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/de/blog/vue-nuxt/vue-3-composition-api-complete-guide