BugMojoBugMojoBugMojo
FeaturesPricingBlogHelpAbout
Add to ChromeLog inGet started
BugMojoBugMojo

Bug reports that actually help fix bugs — capture, replay, share.

A product of Softech Infra.

Product

  • Features
  • Pricing
  • Browser extension
  • Get started
  • Log in

Resources

  • Help & guides
  • Blog
  • Compare
  • Glossary

Company

  • About
  • Contact
  • Security
  • Privacy
  • Terms
  • Sitemap
© 2026 BugMojo. All rights reserved.
AllGuidesEngineeringPlaybooksCompareGlossaryAlternativesBy roleBug tracking by framework
  1. Home
  2. Blog
  3. Bug tracking by framework
  4. Vue 3.5
Bug tracking by framework

Bug tracking for Vue — session replay, console + HAR (2026)

Vue bug-reporting guide for QA + dev teams: framework-specific gotchas, common bugs, and how to capture them with BugMojo session replay.

3 min read·JavaScript
A laptop screen showing a syntax-highlighted Vue single-file component

What Vue teams ship with BugMojo

Vue 3 reactivity is elegant when it works and quietly wrong when it does not. The most common bugs in Vue apps fall into two buckets: reactivity bugs (you mutated a ref directly, you destructured a reactive object, you assigned a new array instead of mutating in place) and lifecycle bugs (you set up a watcher and forgot to stop it, you read `$refs` before the component mounted). Neither shows up in a screenshot.

A useful Vue bug report includes the component name (because Vue's dev tools surface a tree, not a tag soup), the reactive state at the moment the user noticed the bug, and the network payload that triggered the reactive update. BugMojo captures the DOM + console + network — and Vue's dev-mode warnings are loud, so the report usually carries the answer in the console.

This guide is the practical bug-reporting handbook for Vue teams in 2026 — Composition API, `<script setup>`, Pinia, and Nuxt.

Vue gotchas

Framework-specific failure modes engineers actually ship through. Each is hard to spot in a screenshot and obvious in a session replay.

Destructuring a reactive object breaks reactivity

A `const { user } = reactive({ user: {} })` extracts `user` as a plain object — the reactive proxy stays behind. The fix is `toRefs()` when destructuring, or just don't destructure. Bug: UI does not update when `user` changes.

watch() with deep: true runs on every nested mutation

Cheap to write, expensive to run. A deep watcher on a large object re-runs for every nested change, even ones you do not care about. Bug: the page locks up while typing. Replay shows the input lag; profiler confirms the watcher firing 60×/second.

Async setup leaves the component blank if it throws

Top-level await in `<script setup async>` makes the component suspense-able. An unhandled rejection results in a blank component, not an error boundary. Catch errors locally and render a fallback.

Pinia store mutations outside actions warn but persist

Vue 3 dev mode warns when you mutate a Pinia store from a component, but the mutation still happens. Bug: state diverges between page reloads. Always wrap mutations in actions.

Common Vue bugs

Real Vue bug patterns — the symptom you will see in a report and the fix that actually works.

Reactive Map / Set values do not trigger re-renders

Symptom: You add an entry to a `reactive(new Map())` and the UI does not update.

Fix: Vue 3.0–3.4 had partial Map/Set reactivity; 3.5+ fixes it but you must use `reactive()` not `ref()`. Upgrade if you are below 3.5, OR use a plain object keyed by string.

tsts
// ✅ Vue 3.5+
const cache = reactive(new Map<string, User>());
cache.set(id, user); // triggers re-render

Template ref is null on first render

Symptom: `templateRef.value` is null inside a function called from `onMounted`.

Fix: Refs are populated synchronously on mount, but ONLY for elements present on the initial render. For elements rendered conditionally, use `nextTick()` or `watch` on the condition.

tsts
const el = ref<HTMLDivElement | null>(null);
onMounted(async () => {
  await nextTick();
  el.value?.focus();
});

v-model on a custom component does not update parent

Symptom: Typing in a child input does not update the parent's state.

Fix: The child must emit `update:modelValue` (or your custom prop name). In `<script setup>`, use `defineModel()` (Vue 3.4+).

Setup

terminal
# Install BugMojo from the Chrome Web Store — works on Vue 2 and Vue 3 apps

BugMojo vs alternatives

The honest comparison — where BugMojo wins, and where another tool might serve you better.

FeatureBugMojoVue DevTools alone
See what the user saw (replay)✅❌
Console + network capture✅❌
Reactive state at failure✅ (DOM state)✅ (live only)
Shareable bug report✅ one-click❌
Wired into Jira/Linear✅❌
MCP integration for AI coding agents✓—
Zero-setup Quick CaptureNo project, no SDKAccount / SDK required
The BugMojo column is highlighted. The closing rows are BugMojo’s core wedge: rrweb session replay, MCP for AI agents, console + network capture, and zero-setup Quick Capture.
Capture your next bug in 15 seconds

BugMojo records the DOM, console, and network — then ships a one-click ticket with the full replay attached. No SDK, no setup.

Try BugMojo free

Frequently asked questions

Frequently asked questions

Sources

  1. Vue 3 reactivity in depth — vuejs.org (2025)
Share:

More frameworks

Pick another — each guide has its own gotchas, comparison, and fixes.

React 19
JavaScript
Angular 19
TypeScript
Next.js 15
JavaScript
WordPress
PHP / CMS
SvelteKit 2 (Svelte 5)
JavaScript
Astro 5
JavaScript

On this page

  • What Vue teams ship with BugMojo
  • Vue gotchas
  • Common Vue bugs
  • Setup
  • BugMojo vs alternatives