← Zurück zu Website-Bauer
Entdecke, wie der Skill hilft
2. Derived state with
Vorhersehbare Vue-Zustandsänderungen
Ordnet reaktive Daten so, dass Ansichten zuverlässig aktualisieren, ohne doppelte Werte, Watcher-Schleifen oder zurückgelassene Hintergrundarbeit.
vue-reactivity
Teammitglieder mit diesem Skill
Wann ist der Skill hilfreich?
Nutze diesen Skill, wenn eine Vue-Ansicht Änderungen nicht übernimmt, zu oft neu berechnet oder mehrfach Daten anfordert.
Wobei hilft er dir?
- Wählt passende reaktive Container und einen maßgeblichen Besitzer für jeden Wert.
- Berechnet abgeleitete Werte direkt, statt Kopien durch Watcher zu synchronisieren.
- Begrenzt Watcher auf tatsächliche Seiteneffekte und beendet Timer, Listener und offene Arbeit.
Das könntest du fragen
Behebe veraltete Summen und wiederholte Anfragen im Filterpanel. Leite Summen aus einer Quelle ab und beende überholte Abrufe bei Filteränderungen. Ändere zwei Filter schnell und setze beide zurück. Summen folgen dem aktuellen Zustand mit beabsichtigter Anfragenfolge und ohne Watcher-Rückkopplung.
Ausführliche Dokumentation
Hier findest du die ursprüngliche Anleitung, Beispiele und Prüfschritte des Skills in ihrer Originalsprache.
Weniger anzeigen
Vue Reactivity & Composition API
Drive the UI from a clear, minimal reactive state graph: one authoritative source per state, pure computed derivations, and explicit side-effect watchers with cleanup.
1. Choosing reactive primitives
- Default to
ref()for primitives, arrays and objects whose whole value may be replaced. Use.valuein<script>and rely on top-level unwrapping in<template>. - Use
shallowRef()(orshallowReactive()) for large datasets, third-party instances (charts, editors, map SDKs) or immutable server payloads where deep tracking adds needless overhead. Trigger updates by replacing.valueor callingtriggerRef(). - If you use
reactive(), never reassign the variable (state = ...severs the reference) and never destructure its properties directly (const { count } = stateloses reactivity); usetoRef()ortoRefs(). - Refs inside
reactive({})unwrap automatically, but refs inside plain arrays (reactive([ref(1)])),Map/Set, or nested non-top-level template expressions still require.valueor acomputed.
2. Derived state with computed
- Derive every value that is a function of existing state with
computed()instead of storing a duplicaterefsynchronized in awatch. - Keep
computedgetters pure and synchronous: no network calls, no DOM mutations, no mutating other state, and no in-place array mutations (list.value.sort()or.reverse()mutates the source — copy first with[...list.value].sort()or.toSorted()).
3. Watchers and side effects
- Use
watchorwatchEffectonly for real side effects (fetching data, syncing DOM/storage, imperative third-party APIs), never to cascade state between local refs. - Choose the right watcher:
watch(source, cb): explicit dependencies, lazy by default, provides(newVal, oldVal). Pass a getter() => props.idwhen watching a reactive property; passingprops.iddirectly passes a raw value and fails to track.watchEffect(cb): runs immediately and tracks every reactive property read synchronously before the firstawait.
- Avoid
deep: trueon large objects when a targeted getter() => [form.status, form.assigneeId]suffices. - Clean up async or subscribed side effects when the source changes or the scope disposes: use
onWatcherCleanup(fn)(Vue 3.5+, called synchronously beforeawait) or theonCleanupparameter inwatch((_, __, onCleanup) => ...). - Use
watchPostEffect(flush: 'post') when the callback reads Vue-updated DOM geometry.
4. Lifecycle and resource cleanup
- Call lifecycle hooks (
onMounted,onUpdated,onUnmounted,onScopeDispose) synchronously inside<script setup>orsetup(), never after anawait. - Pair every
addEventListener,ResizeObserver,IntersectionObserver, timer (setInterval,setTimeout), WebSocket or store subscription with cleanup inonUnmounted/onScopeDispose.
Before you finish
- Every state has one primary owner; derived values use pure
computed(), not synced refs. - No lost reactivity from destructuring
reactive()or passing raw property values towatch(). - Watchers perform side effects only, avoid chained loops, and cancel stale work on re-run.
- Every listener, timer, observer and subscription is cleaned up on unmount or scope disposal.
Enthaltene Dateien 2
LICENSE.txtSKILL.md
