option
MaisonMaison Skill Développement Web vue-debug-guides

vue-debug-guides

vuejs-ai/skills vuejs-ai/skills

Diagnostiquez et corrigez les erreurs d'exécution, les avertissements, les échecs asynchrones et les problèmes liés au SSR et à l'hydratation dans Vue 3 grâce à des guides de débogage ciblés.

...Développer tout
0
Heure mise à jour 28 septembre 2026

Débogage et gestion des erreurs sous Vue 3 pour les problèmes d'exécution, les avertissements, les échecs asynchrones et les bogues d'hydratation. Pour connaître les bonnes pratiques de développement et les pièges courants, consultez vue-best-practices.

Réactivité

  • Suivi des réaffichages et des mises à jour d'état inattendus → Voir reactivity-debugging-hooks
  • Les valeurs ref ne sont pas mises à jour en raison d’un accès .value manquant → Voir ref-value-access
  • L'état cesse de se mettre à jour après la déstructuration d'objets réactifs → Voir reactive-destructuring
  • Les refs à l’intérieur de tableaux, de maps ou de sets ne sont pas déballées → Voir refs-in-collections-need-value
  • Les refs imbriquées s’affichent sous la forme [object Object] dans les modèles → Voir template-ref-unwrapping-top-level
  • Les comparaisons d’identité des proxys réactifs renvoient toujours « false » → Voir reactivity-proxy-identity-hazard
  • Les instances tierces cessent de fonctionner lorsqu’elles sont proxyées → Voir reactivity-markraw-for-non-reactive
  • Les observateurs ne se déclenchent qu’une seule fois par tick de manière inattendue → Voir reactivity-same-tick-batching

Calculé

  • Les getter calculés déclenchent des mutations ou des requêtes de manière inattendue → Voir computed-no-side-effects
  • La modification de valeurs calculées entraîne la disparition des changements → Voir computed-return-value-readonly
  • La valeur calculée ne se met jamais à jour après une logique conditionnelle → Voir computed-conditional-dependencies
  • Le tri ou l’inversion des tableaux altère l’état d’origine → Voir « computed-array-mutation »
  • Le passage de paramètres aux propriétés calculées échoue → Voir « computed-no-parameters »

Observateurs

  • Les opérations asynchrones écrasent les données avec des données obsolètes → Voir watch-async-cleanup
  • Création de watchers à l’intérieur de callbacks asynchrones → Voir watch-async-creation-memory-leak
  • L’observateur ne se déclenche jamais pour les propriétés d’objets réactifs → Voir watch-reactive-property-getter
  • La méthode `watchEffect` asynchrone ne prend pas en compte les dépendances après `await` → Voir `watcheffect-async-dependency-tracking`
  • Les lectures DOM sont obsolètes dans les callbacks des observateurs → Voir watch-flush-timing
  • Les observateurs profonds signalent des valeurs anciennes et nouvelles identiques → Voir watch-deep-same-object-reference
  • watchEffect s’exécute avant la mise à jour des références de modèle → Voir watcheffect-flush-post-for-refs

Composants

  • Un composant enfant renvoie l'erreur « composant introuvable » → Voir local-components-not-in-descendants
  • L'écouteur de clic ne se déclenche pas sur un composant personnalisé → Voir click-events-on-components
  • Le composant parent ne peut pas accéder aux données de référence du composant enfant dans la configuration du script → Voir component-ref-requires-defineexpose
  • L'analyse syntaxique des modèles HTML perturbe la syntaxe des composants Vue → Voir in-dom-template-parsing-caveats
  • Un composant incorrect s'affiche en raison de conflits de noms → Voir « conflits-de-noms-entre-composants »
  • Les styles du composant parent ne s'appliquent pas à un composant à racines multiples → Voir multi-root-component-class-attrs

Props et Emits

  • Les variables référencées dans `defineProps` provoquent des erreurs → Voir `prop-defineprops-scope-limitation`
  • Le composant émet un événement non déclaré, ce qui génère des avertissements → Voir declare-emits-for-documentation
  • Utilisation de `defineEmits` à l’intérieur d’une fonction ou d’une condition → Voir `defineEmits-must-be-top-level`
  • defineEmits comporte à la fois des arguments de type et d’exécution → Voir defineEmits-no-runtime-and-type-mixed
  • Les écouteurs d’événements natifs ne répondent pas aux clics → Voir native-event-collision-with-emits
  • L’événement du composant se déclenche deux fois au clic → Voir undeclared-emits-double-firing

Modèles

  • Erreurs de compilation de modèles avec des instructions → Voir « restrictions-sur-les-expressions-de-modèle »
  • Erreurs d'exécution « Impossible de lire la propriété de undefined » → Voir v-if-null-check-order
  • Les arguments dynamiques des directives ne fonctionnent pas correctement → Voir dynamic-argument-constraints
  • Les éléments `v-else` s’affichent toujours, sans condition → Voir `v-else-must-follow-v-if`
  • Le mélange de v-if et v-for provoque des bugs de priorité et des problèmes de migration → Voir no-v-if-with-v-for
  • Les appels de fonctions de modèle modifiant l’état provoquent des bugs de réaffichage imprévisibles → Voir template-functions-no-side-effects
  • Les composants enfants dans les boucles affichent des données non définies → Voir v-for-component-props
  • L'ordre d'un tableau change après un tri ou une inversion → Voir v-for-computed-reverse-sort
  • Les éléments de liste disparaissent ou changent d’état de manière inattendue → Voir v-for-key-attribute
  • Erreurs « off-by-one » lors de l’itération sur une plage → Voir v-for-range-starts-at-one
  • v-show ou v-else ne fonctionnent pas sur les éléments de modèle → Voir v-show-template-limitation

Références de modèle

  • La référence devient nulle lorsque l’élément est masqué de manière conditionnelle → Voir template-ref-null-with-v-if
  • Les indices du tableau de la référence ne correspondent pas au tableau de données dans les boucles → Voir template-ref-v-for-order
  • La refactorisation des noms de références de modèle provoque des dysfonctionnements silencieux dans le code → Voir use-template-ref-vue35

Formulaires et v-model

  • Les valeurs initiales des formulaires ne s’affichent pas lors de l’utilisation de v-model → Voir v-model-ignores-html-attributes
  • Les modifications du contenu de la zone de texte ne mettent pas à jour la référence → Voir textarea-no-interpolation
  • Les utilisateurs iOS ne peuvent pas sélectionner la première option d’une liste déroulante → Voir select-initial-value-ios-bug
  • Les composants parents et enfants ont des valeurs différentes → Voir define-model-default-value-sync
  • Les modifications apportées aux propriétés d’un objet ne sont pas synchronisées avec le composant parent → Voir definemodel-object-mutation-no-emit
  • La recherche et la validation en temps réel ne fonctionnent pas pour les saisies en chinois ou en japonais → Voir v-model-ime-composition
  • La saisie d’un nombre renvoie une chaîne vide au lieu de zéro → Voir v-model-number-modifier-behavior
  • Les valeurs personnalisées des cases à cocher ne sont pas transmises dans les formulaires → Voir checkbox-true-false-value-form-submission

Événements et modificateurs

  • L'enchaînement de plusieurs modificateurs d'événements produit des résultats inattendus → Voir event-modifier-order-matters
  • Les raccourcis clavier ne se déclenchent pas avec les touches de modification du système → Voir keyup-modifier-timing
  • Les raccourcis clavier se déclenchent avec des combinaisons de touches de modification non souhaitées → Voir exact-modifier-for-precise-shortcuts
  • La combinaison des modificateurs « passive » et « prevent » perturbe le comportement des événements → Voir no-passive-with-prevent

Cycle de vie

  • Fuites de mémoire dues à des écouteurs d’événements non supprimés → Voir « cleanup-side-effects »
  • L'accès au DOM échoue avant le montage des composants → Voir « lifecycle-dom-access-timing »
  • Les lectures du DOM renvoient des valeurs obsolètes après des changements d’état → Voir « dom-update-timing-nexttick »
  • Le rendu SSR diffère de l’hydratation côté client → Voir « lifecycle-ssr-awareness »
  • Les hooks de cycle de vie enregistrés de manière asynchrone ne s’exécutent jamais → Voir « lifecycle-hooks-synchronous-registration »

Slots

  • L'accès aux données d'un composant enfant dans le contenu d'un slot renvoie des valeurs indéfinies → Voir slot-render-scope-parent-only
  • Le mélange de slots nommés et de slots avec une portée provoque des erreurs de compilation → Voir slot-named-scoped-explicit-default
  • L’utilisation de `v-slot` sur des éléments HTML natifs provoque des erreurs de compilation → Voir `slot-v-slot-on-components-or-templates-only`
  • Placement inattendu du contenu dû au comportement implicite par défaut des slots → Voir slot-implicit-default-content
  • Les props des slots avec portée ne disposent pas de la propriété « name » attendue → Voir slot-name-reserved-prop
  • Les composants « wrappers » perturbent le fonctionnement des slots enfants → Voir slot-forwarding-to-child-components

Provide/Inject

  • L’appel de `provide` après des opérations asynchrones échoue sans message d’erreur → Voir `provide-inject-synchronous-setup`
  • Suivi de la provenance des valeurs fournies → Voir provide-inject-debugging-challenges
  • Les valeurs injectées ne sont pas mises à jour lorsque le fournisseur change → Voir « provide-inject-reactivity-not-automatic »
  • Plusieurs composants partagent le même objet par défaut → Voir « provide-inject-default-value-factory »

Attrs

  • Les gestionnaires d'événements internes et de fallthrough s'exécutent tous les deux → Voir attrs-event-listener-merging
  • Les attributs explicites sont écrasés par les valeurs de fallthrough → Voir fallthrough-attrs-overwrite-vue3
  • Les attributs s’appliquent au mauvais élément dans les wrappers → Voir inheritattrs-false-for-wrapper-components

Composables

  • Composable appelé en dehors du contexte de configuration ou de manière asynchrone → Voir composable-call-location-restrictions
  • Une dépendance réactive d’un composable ne se met pas à jour lorsque l’entrée change → Voir composable-tovalue-inside-watcheffect
  • Un composable modifie l’état externe de manière inattendue → Voir composable-avoid-hidden-side-effects
  • La déstructuration du retour d'un composable rompt la réactivité de manière inattendue → Voir composable-naming-return-pattern

API de composition

  • Les hooks de cycle de vie échouent silencieusement après des opérations asynchrones → Voir composition-api-script-setup-async-context
  • Les références du composant parent ne parviennent pas à accéder aux propriétés exposées → Voir define-expose-before-await
  • Les modèles de programmation fonctionnelle perturbent le comportement attendu de la réactivité Vue → Voir composition-api-not-functional-programming
  • Le modèle mental des hooks React entraîne une utilisation incorrecte de l’API de composition → Voir composition-api-vs-react-hooks-differences

Animation

  • Les animations ne se déclenchent pas lorsque les nœuds DOM sont réutilisés → Voir animation-key-for-rerender
  • Les mises à jour de la liste TransitionGroup semblent lentes en cas de charge importante → Voir animation-transitiongroup-performance

TypeScript

  • Les valeurs par défaut des props mutables provoquent une fuite d’état entre les instances de composants → Voir ts-withdefaults-mutable-factory-function
  • Le typage générique de `reactive()` provoque des incohérences lors du déballage des références → Voir `ts-reactive-no-generic-argument`
  • Les références de modèle (template refs) génèrent des erreurs d'accès à une valeur nulle avant le montage ou après le démontage via v-if → Voir ts-template-ref-null-handling
  • Les props booléennes facultatives se comportent comme « false » au lieu de « undefined » → Voir ts-defineprops-boolean-default-false
  • Les types defineProps importés échouent en raison de références de types non résolubles ou complexes → Voir ts-defineprops-imported-types-limitations
  • Les gestionnaires d’événements DOM non typés échouent sous des paramètres TypeScript stricts → Voir ts-event-handler-explicit-typing
  • Les références de composants dynamiques déclenchent des avertissements de composants réactifs → Voir ts-shallowref-for-dynamic-components
  • Les expressions de modèle de type union échouent aux vérifications de type sans rétrécissement → Voir ts-template-type-casting

Composants asynchrones

  • Composants de routage mal configurés avec le chargement différé via `defineAsyncComponent` → Voir async-component-vue-router
  • Échecs réseau ou délais d’expiration lors du chargement des composants → Voir async-component-error-handling
  • Références de modèle non définies après la réactivation d’un composant → Voir async-component-keepalive-ref-issue

Fonctions de rendu

  • Le résultat d’une fonction de rendu reste statique après des changements d’état → Voir rendering-render-function-return-from-setup
  • Les instances de vnode réutilisées ne s’affichent pas correctement → Voir render-function-vnodes-must-be-unique
  • Les noms de composants sous forme de chaînes de caractères s’affichent comme des éléments HTML → Voir rendering-resolve-component-for-string-names
  • L’accès aux propriétés internes des vnodes provoque des erreurs lors des mises à jour de Vue → Voir render-function-avoid-internal-vnode-properties
  • Les modèles de fonctions de rendu Vue 2 plantent sous Vue 3 → Voir rendering-render-function-h-import-vue3
  • Le contenu des slots ne s’affiche pas à partir de h() → Voir rendering-render-function-slots-as-functions

KeepAlive

  • Les composants enfants sont montés deux fois avec des routes Vue Router imbriquées → Voir keepalive-router-nested-double-mount
  • Augmentation de la consommation de mémoire lors de la combinaison de KeepAlive avec des animations de transition → Voir keepalive-transition-memory-leak

Transitions

  • Les hooks de transition JavaScript se bloquent sans callback « done » → Voir transition-js-hooks-done-callback
  • Les animations de déplacement échouent sur les éléments de liste en ligne → Voir transition-group-flip-inline-elements
  • Les éléments de liste font des sauts au lieu de s’animer en douceur → Voir transition-group-move-animation-position-absolute
  • Les modifications apportées au wrapper TransitionGroup lors du passage de Vue 2 à Vue 3 perturbent la mise en page → Voir transition-group-no-default-wrapper-vue3
  • Les transitions imbriquées s’interrompent avant la fin → Voir transition-nested-duration
  • Les styles avec portée ne fonctionnent plus dans les wrappers de transition réutilisables → Voir transition-reusable-scoped-style
  • Les transitions RouterView s’animent de manière inattendue lors du premier rendu → Voir transition-router-view-appear
  • Le mélange de transitions CSS et d’animations entraîne des problèmes de synchronisation → Voir transition-type-when-mixed
  • Les hooks de nettoyage sont ignorés lors de changements rapides de transition → Voir transition-unmount-hook-timing

Téléportation

  • Élément cible de « Teleport » introuvable dans le DOM → Voir teleport-target-must-exist
  • Le contenu téléporté perturbe l’hydratation SSR → Voir teleport-ssr-hydration
  • Les styles limités à un contexte ne s’appliquent pas au contenu téléporté → Voir « teleport-scoped-styles-limitation »

Suspense

  • Nécessité de gérer les erreurs asynchrones provenant des composants Suspense → Voir suspense-no-builtin-error-handling
  • Utilisation de Suspense avec le rendu côté serveur → Voir suspense-ssr-hydration-issues
  • L'interface utilisateur de chargement asynchrone des composants et d'erreurs est ignorée sous Suspense → Voir async-component-suspense-control

SSR

  • Le code HTML diffère entre le rendu côté serveur et le rendu côté client → Voir ssr-hydration-mismatch-causes
  • Fuites d’état utilisateur entre les requêtes provenant de magasins singleton partagés → Voir state-ssr-cross-request-pollution
  • Les API propres au navigateur provoquent des plantages du rendu serveur dans les chemins de code universels → Voir ssr-platform-specific-apis

Performances

  • Les éléments enfants d’une liste sont réaffichés inutilement car le parent transmet des props instables → Voir perf-props-stability-update-optimization
  • Les objets calculés redéclenchent des effets malgré des valeurs équivalentes → Voir perf-computed-object-stability

SFC (composants à fichier unique)

  • Tentative d’utilisation d’exportations nommées à partir de blocs de script de composants → Voir sfc-named-exports-forbidden
  • Les variables ne sont pas mises à jour dans le modèle après des modifications → Voir sfc-script-setup-reactivity
  • Les styles avec portée ne s’appliquent pas aux éléments des composants enfants → Voir sfc-scoped-css-child-component-styling
  • Les styles avec portée ne s’appliquent pas au contenu v-html dynamique → Voir sfc-scoped-css-dynamic-content
  • Les styles avec portée ne s’appliquent pas au contenu des slots → Voir sfc-scoped-css-slot-content
  • Classes Tailwind manquantes lors de la génération dynamique → Voir tailwind-dynamic-class-generation
  • Les composants récursifs ne s'affichent pas en raison de conflits de noms → Voir self-referencing-component-name

Plugins

  • Débogage des conflits de noms causés par les propriétés globales → Voir plugin-global-properties-sparingly
  • Le plugin ne fonctionne pas ou l’injection renvoie « undefined » → Voir plugin-install-before-mount
  • Les propriétés globales d’un plugin ne sont pas disponibles dans les composants basés sur la configuration → Voir « plugin-prefer-provide-inject-over-global-properties »
  • Des erreurs d’augmentation de type de plugin cassent le typage de ComponentCustomProperties → Voir plugin-typescript-type-augmentation

Configuration de l’application

  • Les méthodes de configuration de l’application ne fonctionnent pas après l’appel à `mount` → Voir configure-app-before-mount
  • Le chaînage de la configuration de l’application après `mount()` échoue car `mount` renvoie une instance de composant → Voir `mount-return-value`
  • L'enregistrement automatique des composants basé sur `require.context` échoue dans Vite → Voir dynamic-component-registration-vite
Voir sur GitHub
---
name: vue-debug-guides
description: Diagnose and fix Vue 3 runtime errors, warnings, async failures, and SSR/hydration issues with targeted debugging guides.
---

Vue 3 debugging and error handling for runtime issues, warnings, async failures, and hydration bugs.
For development best practices and common gotchas, use `vue-best-practices`.

### Reactivity
- Tracing unexpected re-renders and state updates → See [reactivity-debugging-hooks](reference/reactivity-debugging-hooks.md)
- Ref values not updating due to missing .value access → See [ref-value-access](reference/ref-value-access.md)
- State stops updating after destructuring reactive objects → See [reactive-destructuring](reference/reactive-destructuring.md)
- Refs inside arrays, Maps, or Sets not unwrapping → See [refs-in-collections-need-value](reference/refs-in-collections-need-value.md)
- Nested refs rendering as [object Object] in templates → See [template-ref-unwrapping-top-level](reference/template-ref-unwrapping-top-level.md)
- Reactive proxy identity comparisons always return false → See [reactivity-proxy-identity-hazard](reference/reactivity-proxy-identity-hazard.md)
- Third-party instances breaking when proxied → See [reactivity-markraw-for-non-reactive](reference/reactivity-markraw-for-non-reactive.md)
- Watchers only firing once per tick unexpectedly → See [reactivity-same-tick-batching](reference/reactivity-same-tick-batching.md)

### Computed
- Computed getter triggers mutations or requests unexpectedly → See [computed-no-side-effects](reference/computed-no-side-effects.md)
- Mutating computed values causes changes to disappear → See [computed-return-value-readonly](reference/computed-return-value-readonly.md)
- Computed value never updates after conditional logic → See [computed-conditional-dependencies](reference/computed-conditional-dependencies.md)
- Sorting or reversing arrays breaks original state → See [computed-array-mutation](reference/computed-array-mutation.md)
- Passing parameters to computed properties fails → See [computed-no-parameters](reference/computed-no-parameters.md)

### Watchers
- Async operations overwriting with stale data → See [watch-async-cleanup](reference/watch-async-cleanup.md)
- Creating watchers inside async callbacks → See [watch-async-creation-memory-leak](reference/watch-async-creation-memory-leak.md)
- Watcher never triggers for reactive object properties → See [watch-reactive-property-getter](reference/watch-reactive-property-getter.md)
- Async watchEffect misses dependencies after await → See [watcheffect-async-dependency-tracking](reference/watcheffect-async-dependency-tracking.md)
- DOM reads are stale inside watcher callbacks → See [watch-flush-timing](reference/watch-flush-timing.md)
- Deep watchers report identical old/new values → See [watch-deep-same-object-reference](reference/watch-deep-same-object-reference.md)
- watchEffect runs before template refs update → See [watcheffect-flush-post-for-refs](reference/watcheffect-flush-post-for-refs.md)

### Components
- Child component throws "component not found" error → See [local-components-not-in-descendants](reference/local-components-not-in-descendants.md)
- Click listener doesn't fire on custom component → See [click-events-on-components](reference/click-events-on-components.md)
- Parent can't access child ref data in script setup → See [component-ref-requires-defineexpose](reference/component-ref-requires-defineexpose.md)
- HTML template parsing breaks Vue component syntax → See [in-dom-template-parsing-caveats](reference/in-dom-template-parsing-caveats.md)
- Wrong component renders due to naming collisions → See [component-naming-conflicts](reference/component-naming-conflicts.md)
- Parent styles don't apply to multi-root component → See [multi-root-component-class-attrs](reference/multi-root-component-class-attrs.md)

### Props & Emits
- Variables referenced in defineProps cause errors → See [prop-defineprops-scope-limitation](reference/prop-defineprops-scope-limitation.md)
- Component emits undeclared event causing warnings → See [declare-emits-for-documentation](reference/declare-emits-for-documentation.md)
- defineEmits used inside function or conditional → See [defineEmits-must-be-top-level](reference/defineEmits-must-be-top-level.md)
- defineEmits has both type and runtime arguments → See [defineEmits-no-runtime-and-type-mixed](reference/defineEmits-no-runtime-and-type-mixed.md)
- Native event listeners not responding to clicks → See [native-event-collision-with-emits](reference/native-event-collision-with-emits.md)
- Component event fires twice when clicking → See [undeclared-emits-double-firing](reference/undeclared-emits-double-firing.md)

### Templates
- Getting template compilation errors with statements → See [template-expressions-restrictions](reference/template-expressions-restrictions.md)
- "Cannot read property of undefined" runtime errors → See [v-if-null-check-order](reference/v-if-null-check-order.md)
- Dynamic directive arguments not working properly → See [dynamic-argument-constraints](reference/dynamic-argument-constraints.md)
- v-else elements rendering unconditionally always → See [v-else-must-follow-v-if](reference/v-else-must-follow-v-if.md)
- Mixing v-if with v-for causes precedence bugs and migration breakage → See [no-v-if-with-v-for](reference/no-v-if-with-v-for.md)
- Template function calls mutating state cause unpredictable re-render bugs → See [template-functions-no-side-effects](reference/template-functions-no-side-effects.md)
- Child components in loops showing undefined data → See [v-for-component-props](reference/v-for-component-props.md)
- Array order changing after sorting or reversing → See [v-for-computed-reverse-sort](reference/v-for-computed-reverse-sort.md)
- List items disappearing or swapping state unexpectedly → See [v-for-key-attribute](reference/v-for-key-attribute.md)
- Getting off-by-one errors with range iteration → See [v-for-range-starts-at-one](reference/v-for-range-starts-at-one.md)
- v-show or v-else not working on template elements → See [v-show-template-limitation](reference/v-show-template-limitation.md)

### Template Refs
- Ref becomes null when element is conditionally hidden → See [template-ref-null-with-v-if](reference/template-ref-null-with-v-if.md)
- Ref array indices don't match data array in loops → See [template-ref-v-for-order](reference/template-ref-v-for-order.md)
- Refactoring template ref names breaks silently in code → See [use-template-ref-vue35](reference/use-template-ref-vue35.md)

### Forms & v-model
- Initial form values not showing when using v-model → See [v-model-ignores-html-attributes](reference/v-model-ignores-html-attributes.md)
- Textarea content changes not updating the ref → See [textarea-no-interpolation](reference/textarea-no-interpolation.md)
- iOS users cannot select dropdown first option → See [select-initial-value-ios-bug](reference/select-initial-value-ios-bug.md)
- Parent and child components have different values → See [define-model-default-value-sync](reference/define-model-default-value-sync.md)
- Object property changes not syncing to parent → See [definemodel-object-mutation-no-emit](reference/definemodel-object-mutation-no-emit.md)
- Real-time search/validation broken for Chinese/Japanese input → See [v-model-ime-composition](reference/v-model-ime-composition.md)
- Number input returns empty string instead of zero → See [v-model-number-modifier-behavior](reference/v-model-number-modifier-behavior.md)
- Custom checkbox values not submitted in forms → See [checkbox-true-false-value-form-submission](reference/checkbox-true-false-value-form-submission.md)

### Events & Modifiers
- Chaining multiple event modifiers produces unexpected results → See [event-modifier-order-matters](reference/event-modifier-order-matters.md)
- Keyboard shortcuts don't fire with system modifier keys → See [keyup-modifier-timing](reference/keyup-modifier-timing.md)
- Keyboard shortcuts fire with unintended modifier combinations → See [exact-modifier-for-precise-shortcuts](reference/exact-modifier-for-precise-shortcuts.md)
- Combining passive and prevent modifiers breaks event behavior → See [no-passive-with-prevent](reference/no-passive-with-prevent.md)

### Lifecycle
- Memory leaks from unremoved event listeners → See [cleanup-side-effects](reference/cleanup-side-effects.md)
- DOM access fails before component mounts → See [lifecycle-dom-access-timing](reference/lifecycle-dom-access-timing.md)
- DOM reads return stale values after state changes → See [dom-update-timing-nexttick](reference/dom-update-timing-nexttick.md)
- SSR rendering differs from client hydration → See [lifecycle-ssr-awareness](reference/lifecycle-ssr-awareness.md)
- Lifecycle hooks registered asynchronously never run → See [lifecycle-hooks-synchronous-registration](reference/lifecycle-hooks-synchronous-registration.md)

### Slots
- Accessing child component data in slot content returns undefined values → See [slot-render-scope-parent-only](reference/slot-render-scope-parent-only.md)
- Mixing named and scoped slots together causes compilation errors → See [slot-named-scoped-explicit-default](reference/slot-named-scoped-explicit-default.md)
- Using v-slot on native HTML elements causes compilation errors → See [slot-v-slot-on-components-or-templates-only](reference/slot-v-slot-on-components-or-templates-only.md)
- Unexpected content placement from implicit default slot behavior → See [slot-implicit-default-content](reference/slot-implicit-default-content.md)
- Scoped slot props missing expected name property → See [slot-name-reserved-prop](reference/slot-name-reserved-prop.md)
- Wrapper components breaking child slot functionality → See [slot-forwarding-to-child-components](reference/slot-forwarding-to-child-components.md)

### Provide/Inject
- Calling provide after async operations fails silently → See [provide-inject-synchronous-setup](reference/provide-inject-synchronous-setup.md)
- Tracing where provided values come from → See [provide-inject-debugging-challenges](reference/provide-inject-debugging-challenges.md)
- Injected values not updating when provider changes → See [provide-inject-reactivity-not-automatic](reference/provide-inject-reactivity-not-automatic.md)
- Multiple components share same default object → See [provide-inject-default-value-factory](reference/provide-inject-default-value-factory.md)

### Attrs
- Both internal and fallthrough event handlers execute → See [attrs-event-listener-merging](reference/attrs-event-listener-merging.md)
- Explicit attributes overwritten by fallthrough values → See [fallthrough-attrs-overwrite-vue3](reference/fallthrough-attrs-overwrite-vue3.md)
- Attributes applying to wrong element in wrappers → See [inheritattrs-false-for-wrapper-components](reference/inheritattrs-false-for-wrapper-components.md)

### Composables
- Composable called outside setup context or asynchronously → See [composable-call-location-restrictions](reference/composable-call-location-restrictions.md)
- Composable reactive dependency not updating when input changes → See [composable-tovalue-inside-watcheffect](reference/composable-tovalue-inside-watcheffect.md)
- Composable mutates external state unexpectedly → See [composable-avoid-hidden-side-effects](reference/composable-avoid-hidden-side-effects.md)
- Destructuring composable returns breaks reactivity unexpectedly → See [composable-naming-return-pattern](reference/composable-naming-return-pattern.md)

### Composition API
- Lifecycle hooks failing silently after async operations → See [composition-api-script-setup-async-context](reference/composition-api-script-setup-async-context.md)
- Parent component refs unable to access exposed properties → See [define-expose-before-await](reference/define-expose-before-await.md)
- Functional-programming patterns break expected Vue reactivity behavior → See [composition-api-not-functional-programming](reference/composition-api-not-functional-programming.md)
- React Hook mental model causes incorrect Composition API usage → See [composition-api-vs-react-hooks-differences](reference/composition-api-vs-react-hooks-differences.md)

### Animation
- Animations fail to trigger when DOM nodes are reused → See [animation-key-for-rerender](reference/animation-key-for-rerender.md)
- TransitionGroup list updates feel laggy under load → See [animation-transitiongroup-performance](reference/animation-transitiongroup-performance.md)

### TypeScript
- Mutable prop defaults leak state between component instances → See [ts-withdefaults-mutable-factory-function](reference/ts-withdefaults-mutable-factory-function.md)
- reactive() generic typing causes ref unwrapping mismatches → See [ts-reactive-no-generic-argument](reference/ts-reactive-no-generic-argument.md)
- Template refs throw null access errors before mount or after v-if unmount → See [ts-template-ref-null-handling](reference/ts-template-ref-null-handling.md)
- Optional boolean props behave as false instead of undefined → See [ts-defineprops-boolean-default-false](reference/ts-defineprops-boolean-default-false.md)
- Imported defineProps types fail with unresolvable or complex type references → See [ts-defineprops-imported-types-limitations](reference/ts-defineprops-imported-types-limitations.md)
- Untyped DOM event handlers fail under strict TypeScript settings → See [ts-event-handler-explicit-typing](reference/ts-event-handler-explicit-typing.md)
- Dynamic component refs trigger reactive component warnings → See [ts-shallowref-for-dynamic-components](reference/ts-shallowref-for-dynamic-components.md)
- Union-typed template expressions fail type checks without narrowing → See [ts-template-type-casting](reference/ts-template-type-casting.md)

### Async Components
- Route components misconfigured with defineAsyncComponent lazy loading → See [async-component-vue-router](reference/async-component-vue-router.md)
- Network failures or timeouts loading components → See [async-component-error-handling](reference/async-component-error-handling.md)
- Template refs undefined after component reactivation → See [async-component-keepalive-ref-issue](reference/async-component-keepalive-ref-issue.md)

### Render Functions
- Render function output stays static after state changes → See [rendering-render-function-return-from-setup](reference/rendering-render-function-return-from-setup.md)
- Reused vnode instances render incorrectly → See [render-function-vnodes-must-be-unique](reference/render-function-vnodes-must-be-unique.md)
- String component names render as HTML elements → See [rendering-resolve-component-for-string-names](reference/rendering-resolve-component-for-string-names.md)
- Accessing vnode internals breaks on Vue updates → See [render-function-avoid-internal-vnode-properties](reference/render-function-avoid-internal-vnode-properties.md)
- Vue 2 render function patterns crash in Vue 3 → See [rendering-render-function-h-import-vue3](reference/rendering-render-function-h-import-vue3.md)
- Slot content not rendering from h() → See [rendering-render-function-slots-as-functions](reference/rendering-render-function-slots-as-functions.md)

### KeepAlive
- Child components mount twice with nested Vue Router routes → See [keepalive-router-nested-double-mount](reference/keepalive-router-nested-double-mount.md)
- Memory grows when combining KeepAlive with Transition animations → See [keepalive-transition-memory-leak](reference/keepalive-transition-memory-leak.md)

### Transitions
- JavaScript transition hooks hang without done callback → See [transition-js-hooks-done-callback](reference/transition-js-hooks-done-callback.md)
- Move animations fail on inline list elements → See [transition-group-flip-inline-elements](reference/transition-group-flip-inline-elements.md)
- List items jump instead of smoothly animating → See [transition-group-move-animation-position-absolute](reference/transition-group-move-animation-position-absolute.md)
- Vue 2 to Vue 3 TransitionGroup wrapper changes break layout → See [transition-group-no-default-wrapper-vue3](reference/transition-group-no-default-wrapper-vue3.md)
- Nested transitions cut off before finishing → See [transition-nested-duration](reference/transition-nested-duration.md)
- Scoped styles stop working in reusable transition wrappers → See [transition-reusable-scoped-style](reference/transition-reusable-scoped-style.md)
- RouterView transitions animate unexpectedly on first render → See [transition-router-view-appear](reference/transition-router-view-appear.md)
- Mixing CSS transitions and animations causes timing issues → See [transition-type-when-mixed](reference/transition-type-when-mixed.md)
- Cleanup hooks missed during rapid transition swaps → See [transition-unmount-hook-timing](reference/transition-unmount-hook-timing.md)

### Teleport
- Teleport target element not found in DOM → See [teleport-target-must-exist](reference/teleport-target-must-exist.md)
- Teleported content breaks SSR hydration → See [teleport-ssr-hydration](reference/teleport-ssr-hydration.md)
- Scoped styles not applying to teleported content → See [teleport-scoped-styles-limitation](reference/teleport-scoped-styles-limitation.md)

### Suspense
- Need to handle async errors from Suspense components → See [suspense-no-builtin-error-handling](reference/suspense-no-builtin-error-handling.md)
- Using Suspense with server-side rendering → See [suspense-ssr-hydration-issues](reference/suspense-ssr-hydration-issues.md)
- Async component loading/error UI ignored under Suspense → See [async-component-suspense-control](reference/async-component-suspense-control.md)

### SSR
- HTML differs between server and client renders → See [ssr-hydration-mismatch-causes](reference/ssr-hydration-mismatch-causes.md)
- User state leaks between requests from shared singleton stores → See [state-ssr-cross-request-pollution](reference/state-ssr-cross-request-pollution.md)
- Browser-only APIs crash server rendering in universal code paths → See [ssr-platform-specific-apis](reference/ssr-platform-specific-apis.md)

### Performance
- List children re-render unnecessarily because parent passes unstable props → See [perf-props-stability-update-optimization](reference/perf-props-stability-update-optimization.md)
- Computed objects retrigger effects despite equivalent values → See [perf-computed-object-stability](reference/perf-computed-object-stability.md)

### SFC (Single File Components)
- Trying to use named exports from component script blocks → See [sfc-named-exports-forbidden](reference/sfc-named-exports-forbidden.md)
- Variables not updating in template after changes → See [sfc-script-setup-reactivity](reference/sfc-script-setup-reactivity.md)
- Scoped styles not applying to child component elements → See [sfc-scoped-css-child-component-styling](reference/sfc-scoped-css-child-component-styling.md)
- Scoped styles not applying to dynamic v-html content → See [sfc-scoped-css-dynamic-content](reference/sfc-scoped-css-dynamic-content.md)
- Scoped styles not applying to slot content → See [sfc-scoped-css-slot-content](reference/sfc-scoped-css-slot-content.md)
- Tailwind classes missing when built dynamically → See [tailwind-dynamic-class-generation](reference/tailwind-dynamic-class-generation.md)
- Recursive components not rendering due to name conflicts → See [self-referencing-component-name](reference/self-referencing-component-name.md)

### Plugins
- Debugging why global properties cause naming conflicts → See [plugin-global-properties-sparingly](reference/plugin-global-properties-sparingly.md)
- Plugin not working or inject returns undefined → See [plugin-install-before-mount](reference/plugin-install-before-mount.md)
- Plugin global properties are unavailable in setup-based components → See [plugin-prefer-provide-inject-over-global-properties](reference/plugin-prefer-provide-inject-over-global-properties.md)
- Plugin type augmentation mistakes break ComponentCustomProperties typing → See [plugin-typescript-type-augmentation](reference/plugin-typescript-type-augmentation.md)

### App Configuration
- App configuration methods not working after mount call → See [configure-app-before-mount](reference/configure-app-before-mount.md)
- Chaining app config off mount() fails because mount returns component instance → See [mount-return-value](reference/mount-return-value.md)
- require.context-based component auto-registration fails in Vite → See [dynamic-component-registration-vite](reference/dynamic-component-registration-vite.md)

Tous les fichiers

140 fichiers
SKILL.md 20.4k
Voir

Installer vue-debug-guides

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/vuejs-ai/skills/tree/main/skills/vue-debug-guides # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera
Dépôt vuejs-ai/skills

Compétences similaires

github-code-search
Heure mise à jour 29 juin 2026
drizzle-orm
Heure mise à jour 29 juin 2026
prisma-client-api
Heure mise à jour 29 juin 2026
clickhouse-io
Heure mise à jour 29 juin 2026
OR