Vue 3’s reactivity is elegant until it silently stops working. These questions check whether a candidate understands refs, the Composition API and how to keep a large Vue app maintainable.
Hiring a Vue.js developer is easy. Telling a real one from a convincing résumé is the hard part — and it’s most of what we do. These are grouped by level, because the same question that stretches a junior is a warm-up for a senior.
Junior Vue.js interview questions
0–2 years
Reactivity basics and template fundamentals.
What’s the difference between ref and reactive?
ref wraps any value and is accessed via .value (needed for primitives); reactive makes an object deeply reactive via a proxy. A strong answer notes that destructuring a reactive object loses reactivity unless you use toRefs.
Destructures a reactive object and expects the pieces to stay reactive.
Computed properties vs methods — when to use each?
Computed values are cached and only re-evaluate when their dependencies change; methods run on every render. Derived state should be a computed, not a method.
Uses methods for derived values that then recompute needlessly on every render.
How does v-model work under the hood?
It’s sugar for a value binding plus an event handler (modelValue + update:modelValue on components), and it can be customised. They know it’s a prop/event pair, not magic.
Treats v-model as magic two-way binding with no underlying prop and event.
Mid-level Vue.js interview questions
2–5 years
Composition API and state across components.
Composition API vs Options API — what are the tradeoffs?
Composition API makes logic reusable through composables and works better with TypeScript; Options API is simpler for small components. Composables replace Vue 2 mixins and their implicit-collision problems.
Reaches for mixins for shared logic in new Vue 3 code, unaware of composables.
How do you share state across components?
Props/emit for parent-child, provide/inject for a subtree, and Pinia for app-wide state; server data belongs in its own layer, not hand-rolled into a store. They avoid prop-drilling and prop mutation.
Mutates props directly or wires a global event bus for state.
What causes unnecessary re-renders and how do you reduce them?
Stable keys, computed caching, v-once/v-memo for static or expensive subtrees, shallowRef for large structures, and keeping heavy work out of templates. They measure with Vue DevTools.
No idea how to observe or reduce re-renders.
Senior Vue.js interview questions
5+ years
Architecture, reactivity edge cases and SSR.
How do you architect a large Vue application?
Feature-based structure, Pinia stores per domain, composables for shared logic, typed props, and lazy-loaded routes; server state is kept separate from UI state. Clear boundaries over one giant store.
Puts all logic in components and everything in a single global store.
What reactivity edge cases have bitten you in production?
Losing reactivity on destructure, replacing vs mutating arrays/objects, watchers firing more than expected, and watch vs computed misuse (in Vue 2, adding properties needed Vue.set). Concrete war stories, not theory.
Can’t name a single reactivity gotcha.
What are the tradeoffs of SSR / Nuxt?
Better SEO and first paint, at the cost of hydration overhead, more server load, and universal-code constraints (no window on the server); caching strategy matters. They see the downsides, not just the wins.
Assumes SSR is a free performance win with no complexity.
Browse the full series on the interview questions hub, or see how we assess engineers in our interview process.