VUE 3 · COMPOSITION API · 15 QUESTIONS · ABOUT 10 MINUTES

Reactive, until you destructure it.

Vue tracks your data automatically, which is lovely until a value silently stops updating. Fifteen questions on reactivity, templates, props, computed and watchers, each explained. No sign-up, nothing saved.

Start the Vue test
const state = reactive({ n: 0 });let { n } = state;state.n++;console.log(n);
logs0
QUESTION 1 / 15 · REACTIVITYEasy

What does this log?

const count = ref(1);console.log(count.value + 1, typeof count);

What this Vue test measures, in short

This test checks whether you understand how Vue 3 tracks and updates data: ref versus reactive and when reactivity is lost, how directives like v-if, v-show and v-model work, how props and attributes flow, when computed values and watchers run, and when the DOM actually updates.

Questions use the Composition API with script setup. The Options API and Nuxt aren't covered. The questions are our own and not standardised, so treat the result as a knowledge check, not a certification.

By What's Your IQ · Reviewed 4 Oct 2026
Format
15 questions on what renders or logs, 4 options each
Topics
Reactivity, templates and directives, components and props, computed and watchers, lifecycle
Assumes
Comfortable JavaScript and HTML
Framework
Created by Evan You; first released 2014
QUESTION 3, LIVE

Which ones keep up?

Vue's reactivity works through proxies and refs. Pull a plain value out of either and you get a snapshot that no longer updates. Change the source and see which copies follow.

source value: 0
DestructuredSnapshot
const state = reactive({ count: 0 });const { count } = state;
template shows0Copied out once. A plain number that never changes again.
toRefsReactive
const state = reactive({ count: 0 });const { count } = toRefs(state);
template shows0Each property becomes a ref linked back to the proxy, so it stays in sync.
Whole proxyReactive
const state = reactive({ count: 0 });// template: state.count
template shows0Reading through the proxy at render time lets Vue track it.
Spread copySnapshot
const state = reactive({ count: 0 });const copy = { ...state };
template shows0Spreading makes a new plain object. Reactivity doesn't come along.
COMMON REVIEW COMMENTS

Works today, confuses everyone tomorrow

FRAGILE
const items = ref([]);const total = ref(0);watch(items, list => { total.value = list.reduce((s, i) => s + i.price, 0);}, { deep: true });
IDIOMATIC
const items = ref([]);const total = computed(() => items.value.reduce((s, i) => s + i.price, 0));

If a value can be calculated from other state, make it computed. It's cached, always in sync, and needs no deep watcher.

Independentno big tech company behind itUnlike React (Meta) and Angular (Google), Vue is led by its creator and a core team, funded largely by sponsors and donations.1
2014The lighter alternative. Evan You, who had used AngularJS at Google, released Vue to keep the parts he liked in a much smaller package.1
2016 · 2.0Virtual DOM. Vue 2 added a virtual DOM and server rendering, and grew quickly, especially in Asia.2
2020 · 3.0Proxies and the Composition API. Reactivity was rebuilt on JavaScript Proxies, and ref, reactive and computed became usable outside components.2
2023Vue 2 retires. Vue 2 reached end of life on 31 December 2023, after Vue 3 had become the default in 2022.3
  1. Honeypot. (2020). Vue.js: The documentary.
  2. You, E. (2020). Vue 3.0 "One Piece" release announcement. Vue Blog.
  3. Vue Team. Vue 2 end of life. v2.vuejs.org.

Where to go next

You know what Vue tracks. How do you reason?

Our full IQ test measures the logic and working memory behind good code: 60 questions across four domains, about 30 minutes.

Take the full IQ test