📖 Scenario: You are building a simple Vue 3 app that shows a list of numbers and their doubled values. You want to learn the difference between using a computed property and a method to double the numbers.
🎯 Goal: Create a Vue 3 component that displays doubled numbers using both a computed property and a method. Observe how Vue updates the UI efficiently with computed properties compared to methods.
📋 What You'll Learn
Use Vue 3 Composition API with <script setup>
Create a reactive array of numbers
Create a computed property that returns doubled numbers
Create a method that returns doubled numbers
Display both doubled lists in the template
💡 Why This Matters
🌍 Real World
This project helps understand how Vue optimizes UI updates using computed properties versus methods, which is important for building fast and responsive web apps.
💼 Career
Knowing when to use computed properties or methods is a key skill for Vue developers to write efficient and maintainable code.
Progress0 / 4 steps
1
Data Setup: Create a reactive array of numbers
Create a reactive array called numbers with the values [1, 2, 3, 4, 5] using Vue's ref.
Vue
Hint
Use const numbers = ref([1, 2, 3, 4, 5]) to create the reactive array.
2
Configuration: Import computed and define a computed property
Import computed from 'vue' and create a computed property called doubledComputed that returns each number in numbers.value multiplied by 2.
Vue
Hint
Use computed(() => numbers.value.map(n => n * 2)) to create the computed property.
3
Core Logic: Define a method to double numbers
Create a function called doubledMethod that returns a new array with each number in numbers.value multiplied by 2.
Vue
Hint
Define doubledMethod as a function that returns numbers.value.map(n => n * 2).
4
Completion: Display doubled numbers using computed and method in template
In the template, use v-for to display two lists: one showing doubledComputed values and one showing doubledMethod() values. Label each list with headings Doubled with Computed and Doubled with Method.
Vue
Hint
Use <li v-for="(num, index) in doubledComputed" :key="index">{{ num }}</li> and similarly for doubledMethod().
Practice
(1/5)
1. Which statement best explains why computed properties are generally faster than methods in Vue?
easy
A. Computed properties cache their results and only recalculate when dependencies change.
B. Methods run only once and then cache their results automatically.
C. Computed properties run every time the component renders without caching.
D. Methods cache results and update only when data changes.
Solution
Step 1: Understand computed property behavior
Computed properties remember their last result and only recalculate if their dependent data changes.
Step 2: Contrast with methods
Methods run fresh every time they are called, without caching results.
Final Answer:
Computed properties cache their results and only recalculate when dependencies change. -> Option A
Quick Check:
Computed cache = B [OK]
Hint: Remember: computed caches, methods do not [OK]
Common Mistakes:
Thinking methods cache results automatically
Believing computed properties run every render
Confusing when caching happens
2. Which of the following is the correct syntax to define a computed property named fullName in a Vue 3 component using the Composition API?
In Vue 3 Composition API, computed properties are created by calling the computed function with a getter function.
Step 2: Check each option
const fullName = computed(() => firstName + ' ' + lastName); correctly uses computed(() => ...). Options B and C use Options API syntax, and D is just a plain function without caching.
B. Computed called\nMethod called: 2\nMethod called: 4
C. Computed called\nMethod called: 2\nComputed called\nMethod called: 4
D. Computed called\nComputed called\nMethod called: 2\nMethod called: 4
Solution
Step 1: Understand computed caching and logging
The computed property logs 'Computed called' only when recalculated. It recalculates when count.value changes.
Step 2: Trace the two button clicks
First click: count=1 triggers computed recalculation (logs 'Computed called'), then method logs 'Method called: 2'. Second click: count=2 triggers computed recalculation again (logs 'Computed called'), then method logs 'Method called: 4'.
Final Answer:
Computed called
Method called: 2
Computed called
Method called: 4 -> Option C
Quick Check:
Computed logs twice, method logs twice = A [OK]
Hint: Computed logs only on dependency change, methods run every call [OK]
Common Mistakes:
Assuming computed logs every method call
Ignoring reactive dependency triggers
Confusing method and computed logs
4. You have a Vue component where a method is used to calculate a value that depends on reactive data. The UI is slow because the method runs on every render. How can you fix this performance issue?
medium
A. Convert the method to a computed property so it caches results until dependencies change.
B. Wrap the method call inside a watch to run less often.
C. Use a lifecycle hook to call the method only once.
D. Move the method logic to a separate utility file.
Solution
Step 1: Identify the cause of slowness
Methods run fresh every render, causing repeated calculations and slowing UI.
Step 2: Apply computed property for caching
Computed properties cache results and only recalculate when reactive dependencies change, improving performance.
Final Answer:
Convert the method to a computed property so it caches results until dependencies change. -> Option A
Quick Check:
Use computed for caching = C [OK]
Hint: Switch slow methods to computed for caching [OK]
5. You have a Vue 3 component that displays a filtered list based on a search term. The filtering is done inside a method called filteredList() which runs on every render, causing lag with large data. How can you optimize this using computed properties? Consider that the list and search term are reactive refs.
hard
A. Use a method but memoize results manually with a cache object.
B. Replace the method with a computed property that returns the filtered list, so filtering runs only when list or search term changes.
C. Move filtering logic to a watcher that updates a reactive variable with filtered results.
D. Keep the method but debounce the search input to reduce calls.
Solution
Step 1: Identify reactive dependencies
The filtered list depends on the reactive list and search term, so it should update only when these change.
Step 2: Use computed property for caching
Computed properties cache results and recalculate only when dependencies change, making filtering efficient.
Step 3: Compare other options
Debouncing reduces calls but does not cache results. Watchers add complexity. Manual memoization is error-prone.
Final Answer:
Replace the method with a computed property that returns the filtered list, so filtering runs only when list or search term changes. -> Option B
Quick Check:
Use computed for reactive filtering = D [OK]
Hint: Use computed to cache filtered results by dependencies [OK]
Common Mistakes:
Relying on debouncing without caching
Using watchers unnecessarily
Trying manual memoization instead of computed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.