Vue Interview Questions

Vue interview questions test the Composition API, reactivity, directives, components, and composables. Vue interviews tend to focus on how the reactivity system tracks changes and how you'd organize state as an app grows. This page covers 40 real Vue interview questions with answers across four formats: multiple choice, written answers, spoken responses, and live coding challenges, the same mix used in modern technical interviews.

Practice each question in your browser with no signup required. Answers stay hidden until you attempt the question: type, speak, or code your response first, then compare it against the model answer. Questions range from fundamentals for your first developer job to scenario-based questions for senior roles, so you can find the gaps in your knowledge before the real interview.

40 questions with answersLast updated: Oct 19, 2026
Start a mock interview

How to practice

  1. Choose a question. Pick any of the 40 questions. They mix multiple choice, written, spoken, and coding, the same mix a real interviewer uses.
  2. Attempt your answer. Select a multiple-choice option, type your written response, record a spoken answer, or write code in the editor.
  3. Reveal the model answer. Once you have attempted the question, the model answer unlocks so you can compare it with yours.
  4. Move to the next question. Track how many questions you have attempted with the progress bar at the top of the page.
  5. Take a mock interview. When you are ready, try a full mock technical interview on Plaicer with AI-driven follow-up questions.

Vue Interview Questions and Answers

0 of 40 attempted
1Multiple choice

How would you describe Vue.js and its primary purpose in web development?

Attempt the question first to reveal the answer.

2Written answer

Explain Vue.js fundamentals including its component model and key architectural concepts

Attempt the question first to reveal the answer.

3Spoken answer

Walk through how you would design a reusable modal component that other developers can use across the application

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

4Coding

Create a Vue component that displays a counter with increment and decrement buttons using the Composition API

<template>
  <div class="counter">
    <!-- Display counter value and add buttons -->
  </div>
</template>

<script setup lang="ts">
// Implement counter logic here
</script>

Attempt the question first to reveal the answer.

5Multiple choice

What is the .vue file format and what does it enable?

Attempt the question first to reveal the answer.

6Written answer

Describe the structure and benefits of Single-File Components in build-tool-enabled projects

Attempt the question first to reveal the answer.

7Spoken answer

Describe a situation where you chose to use provide/inject instead of props and explain why it was the right choice

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

8Coding

Create a component that displays a list of products and filters them based on a search input

<template>
  <div class="products">
    <input v-model="searchTerm" placeholder="Search products..." />
    <!-- Render filtered products -->
  </div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';

const searchTerm = ref('');
const products = [
  { id: 1, name: 'Laptop' },
  { id: 2, name: 'Mouse' },
  { id: 3, name: 'Keyboard' }
];
// Add filtering logic here
</script>

Attempt the question first to reveal the answer.

9Multiple choice

How does the Composition API differ in structure from other Vue API styles?

Attempt the question first to reveal the answer.

10Written answer

Compare the Composition API approach with the Options API, discussing tradeoffs for different scenarios

Attempt the question first to reveal the answer.

11Spoken answer

Explain how you would debug a component that isn't updating when its data changes, even though you believe it should be reactive

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

12Coding

Build a component that toggles the visibility of details content when a button is clicked using v-if

<template>
  <div class="details">
    <button @click="toggleDetails">Show Details</button>
    <!-- Conditionally render details -->
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
// Add logic here
</script>

Attempt the question first to reveal the answer.

13Multiple choice

When would you choose v-if over v-show for conditional rendering?

Attempt the question first to reveal the answer.

14Written answer

Explain how ref() works and when you would use it for reactive values

Attempt the question first to reveal the answer.

15Spoken answer

Talk about a time you optimized a Vue component or list that was rendering slowly and what techniques you applied

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

16Coding

Create a dropdown component that displays a list of menu options when clicked and emits the selected option

<template>
  <div class="dropdown">
    <button @click="toggleMenu">{{ selectedOption || 'Select an option' }}</button>
    <!-- Render menu items when open -->
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const isOpen = ref(false);
const selectedOption = ref(null);
const options = ['Option A', 'Option B', 'Option C'];

const emit = defineEmits<{
  select: [option: string];
}>();
// Add logic here
</script>

Attempt the question first to reveal the answer.

17Multiple choice

What role do keys play when rendering lists that can change?

Attempt the question first to reveal the answer.

18Written answer

Describe reactive() and explain the pitfall when destructuring reactive objects

Attempt the question first to reveal the answer.

19Spoken answer

Describe how you would approach organizing components, composables, and stores in a large Vue application to keep it maintainable

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

20Coding

Create a component that displays items with prices and uses a computed property to calculate the total

<template>
  <div class="shopping">
    <ul>
      <!-- Display items with prices -->
    </ul>
    <p>Total: {{ total }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';

const items = ref([
  { name: 'Book', price: 15 },
  { name: 'Pen', price: 2 },
  { name: 'Notebook', price: 8 }
]);
// Calculate total with computed
</script>

Attempt the question first to reveal the answer.

21Multiple choice

Describe the flow of data when using props between parent and child components

Attempt the question first to reveal the answer.

22Written answer

Distinguish between computed and watch, explaining when to use each

Attempt the question first to reveal the answer.

23Spoken answer

Explain how you would handle form validation in Vue, including display of error messages and preventing submission when invalid

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

24Coding

Build a component with an email input that validates the format and displays error messages

<template>
  <div class="email-form">
    <input v-model="email" type="email" placeholder="Enter email" />
    <!-- Show validation error if needed -->
  </div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';

const email = ref('');
// Add validation logic
</script>

Attempt the question first to reveal the answer.

25Multiple choice

How does v-model create a two-way binding convention in Vue components?

Attempt the question first to reveal the answer.

26Written answer

Explain Vue's dependency tracking system and how reactivity updates components

Attempt the question first to reveal the answer.

27Spoken answer

Walk through how you would implement a feature where URL filters sync with component state so users can bookmark results

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

28Coding

Create a component that toggles a CSS class on an element based on a button click

<template>
  <div>
    <button @click="toggleActive">Toggle Style</button>
    <!-- Apply active class conditionally -->
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
// Add logic here
</script>

<style scoped>
.active {
  background-color: green;
  color: white;
}
</style>

Attempt the question first to reveal the answer.

29Multiple choice

Explain how slots enable content composition in Vue components

Attempt the question first to reveal the answer.

30Written answer

Define composables and discuss how they encapsulate reusable stateful logic

Attempt the question first to reveal the answer.

31Spoken answer

Describe how you would set up a composable that handles loading, error, and retry logic for API requests

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

32Coding

Create a component that allows adding new todos and marking them as completed

<template>
  <div class="todos">
    <input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a todo" />
    <!-- Display todos with completion toggle -->
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
// Add todo logic here
</script>

Attempt the question first to reveal the answer.

33Multiple choice

When should you use provide/inject versus props for passing data?

Attempt the question first to reveal the answer.

34Written answer

Describe the pattern for managing loading, success, error, and empty states when fetching data

Attempt the question first to reveal the answer.

35Spoken answer

Explain how you would teach a junior developer the difference between Composition API and Options API to help them choose the right approach

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

36Coding

Create a component that displays product prices formatted as currency using a computed property

<template>
  <div class="inventory">
    <ul>
      <!-- Display products with formatted prices -->
    </ul>
  </div>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue';

const products = ref([
  { id: 1, name: 'Widget', price: 19.99 },
  { id: 2, name: 'Gadget', price: 49.50 }
]);
// Add formatting logic
</script>

Attempt the question first to reveal the answer.

37Multiple choice

How do composables package and reuse stateful logic in Vue?

Attempt the question first to reveal the answer.

38Written answer

Explain which state should go in the URL versus stay as local component state

Attempt the question first to reveal the answer.

39Spoken answer

Talk about managing component communication in a scenario where deeply nested children need to notify distant ancestors about state changes

This browser cannot record audio. Answer the question out loud anyway, then compare yourself against the model answer below.

Attempt the question first to reveal the answer.

40Coding

Build a button component that emits a custom event with data when clicked

<template>
  <button @click="handleClick">
    Click Me
  </button>
</template>

<script setup lang="ts">
const emit = defineEmits<{
  myEvent: [message: string];
}>();

function handleClick() {
  // Emit event with data
}
</script>

Attempt the question first to reveal the answer.

Topics covered

  • Vue fundamentals: single-file components, templates
  • Composition API vs Options API
  • Reactivity: ref, reactive, dependency tracking
  • Computed properties and watchers
  • Directives: v-if vs v-show, v-for and keys, v-model
  • Component communication: props, emits, slots
  • Provide and inject
  • Composables: reusable logic, loading and error states
  • Forms and validation
  • App structure: organizing large apps, URL vs local state

Frequently asked questions

How many Vue interview questions are on this page?
40 real Vue interview questions across four formats: multiple choice (10), written answer (10), spoken answer (10), and coding (10).
Do I need to sign up to practice?
No. All 40 questions and model answers are free with no signup. You attempt each question first, and the model answer unlocks once you have engaged.
Who are these Vue interview questions for?
Developers preparing for Vue technical interviews at any level, from first job to senior engineer roles. Questions cover fundamentals through real-world scenarios.
What topics do the Vue questions cover?
The questions cover single-file components, the Composition and Options APIs, and reactivity with ref and reactive. They also test computed properties, watchers, and directives. Other topics include component communication, provide and inject, composables, and forms.
Can I practice coding questions in the browser?
Yes. Coding questions include starter code in an in-browser editor, so you can write your solution without installing anything.
How often are the questions updated?
The question bank is reviewed regularly and updated to reflect current Vue interview patterns.
Can I take a full mock interview?
Yes. Plaicer's mock technical interview walks you through a realistic 30 to 45 minute interview with AI-driven follow-up questions.
Do the questions cover Vue 2 or Vue 3?
Vue 3, with a focus on the Composition API. A few questions compare it with the Options API, since interviews still ask about both.

Pick your language

View all programming interview questions

Reading answers is not the same as giving them. Sit a full mock interview and get scored on how you actually explain them.

Try a mock interview