Bird
Raised Fist0
Vueframework~10 mins

Watch vs computed decision in Vue - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Watch vs computed decision
Start
↓
Define reactive data
↓
Computed property
↓
Auto recalculates
↓
Used in template
↓
Update UI
Shows how reactive data triggers either computed properties or watch effects, leading to UI updates.
Execution Sample
Vue
const count = ref(1)
const double = computed(() => count.value * 2)
watch(count, (newVal) => console.log('Count changed:', newVal))

count.value = 2
Reactive count changes, computed double updates automatically, watch logs change.
Execution Table
StepActioncount.valuedouble.valueWatch TriggeredOutput
1Initialize count=112No
2Read double.value12No
3Change count.value = 222YesCount changed: 2
4Read double.value after change24No
💡 No more changes; reactive system stabilizes.
Variable Tracker
VariableStartAfter Step 3Final
count.value122
double.value224
Watch TriggeredNoYesNo
Key Moments - 3 Insights
Why does the computed property update its value automatically when count changes?
Because computed properties track their reactive dependencies and recalculate when those change, as shown in execution_table step 4.
Why does the watch trigger only after count changes, not on initialization?
Watch runs its callback only when the watched reactive value changes after setup, as seen in execution_table step 3.
Can computed properties cause side effects like watch does?
No, computed properties are pure and only return values; side effects belong in watch callbacks, as shown by the console.log in step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is double.value after step 3?
A4
B2
C1
DUndefined
💡 Hint
Check the double.value column at step 3 in the execution_table.
At which step does the watch callback run?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the Watch Triggered column in execution_table.
If count.value changed to 3 instead of 2, what would double.value be after the change?
A6
B3
C2
DUndefined
💡 Hint
Recall computed property doubles count.value as shown in variable_tracker.
Concept Snapshot
Vue reactive data triggers updates.
Computed properties auto-recalculate when dependencies change.
Watch runs code on reactive data changes for side effects.
Use computed for derived data, watch for reacting to changes.
Computed is cached; watch runs every change.
Choose based on need: value or side effect.
Full Transcript
This visual execution shows how Vue's reactive data system works with computed properties and watch effects. We start with a reactive count set to 1. The computed property double calculates count times two and updates automatically when count changes. The watch listens to count changes and runs a callback logging the new value. When count changes to 2, the watch triggers and logs the change, while the computed property updates its value to 4 on next read. Computed properties are pure and cached, while watch is for side effects. This helps decide when to use each in Vue apps.

Practice

(1/5)
1. Which Vue feature should you use to create a value that automatically updates and caches based on other reactive data?
easy
A. Computed property
B. Watch property
C. Method
D. Lifecycle hook

Solution

  1. Step 1: Understand computed properties

    Computed properties automatically update when their dependencies change and cache their results for efficiency.
  2. Step 2: Compare with watch

    Watch is for running code on data changes, not for caching reactive values.
  3. Final Answer:

    Computed property -> Option A
  4. Quick Check:

    Reactive cached value = Computed property [OK]
Hint: Use computed for reactive cached values, watch for side effects [OK]
Common Mistakes:
  • Using watch to compute and cache values
  • Confusing methods with computed properties
  • Thinking lifecycle hooks handle reactive caching
2. Which of the following is the correct syntax to define a computed property named fullName in Vue 3 Composition API using computed?
easy
A. const fullName = reactive(() => firstName + ' ' + lastName);
B. const fullName = watch(() => firstName + ' ' + lastName);
C. const fullName = computed(() => firstName + ' ' + lastName);
D. const fullName = ref(() => firstName + ' ' + lastName);

Solution

  1. Step 1: Identify correct function for computed

    The computed function takes a getter function and returns a reactive, cached value.
  2. Step 2: Check other options

    watch is for side effects, reactive creates reactive objects, ref creates reactive primitives, none are for computed caching.
  3. Final Answer:

    const fullName = computed(() => firstName + ' ' + lastName); -> Option C
  4. Quick Check:

    Computed syntax = computed(() => ...) [OK]
Hint: Use computed(() => ...) for reactive cached values [OK]
Common Mistakes:
  • Using watch instead of computed for caching
  • Confusing reactive and ref with computed
  • Missing arrow function inside computed
3. Given the Vue 3 setup below, what will be logged when count.value changes from 0 to 1?
const count = ref(0);
watch(count, (newVal, oldVal) => {
  console.log(`Count changed from ${oldVal} to ${newVal}`);
});
count.value = 1;
medium
A. Error: watch callback parameters incorrect
B. Count changed from 1 to 0
C. No output
D. Count changed from 0 to 1

Solution

  1. Step 1: Understand watch behavior

    The watch function runs its callback when the watched reactive value changes, passing new and old values.
  2. Step 2: Analyze the code

    When count.value changes from 0 to 1, the callback logs the change with oldVal=0 and newVal=1.
  3. Final Answer:

    Count changed from 0 to 1 -> Option D
  4. Quick Check:

    Watch logs old and new values on change [OK]
Hint: Watch logs old and new values on reactive changes [OK]
Common Mistakes:
  • Mixing newVal and oldVal order
  • Expecting watch to cache values like computed
  • Not calling .value on ref when changing
4. Identify the error in this Vue 3 watch usage:
const count = ref(0);
watch(() => count, (newVal, oldVal) => {
  console.log(newVal);
});
count.value = 5;
medium
A. The watch source should be count not a function returning count
B. The watch source function should return count.value instead of count
C. The watch callback parameters are reversed
D. No error, code works correctly

Solution

  1. Step 1: Understand watch source function

    The watch source function should return the reactive value to watch, not the ref object itself.
  2. Step 2: Identify the mistake

    The function returns count (a ref), but it should return count.value to watch the actual value.
  3. Final Answer:

    The watch source function should return count.value instead of count -> Option B
  4. Quick Check:

    Watch source must return reactive value, not ref object [OK]
Hint: Return .value inside watch source function to track value changes [OK]
Common Mistakes:
  • Returning ref instead of its value in watch source
  • Confusing parameter order in watch callback
  • Assuming watch works without reactive source
5. You want to update the document title whenever the user's full name changes, which is computed from first and last names. Which Vue approach is best to implement this behavior?
hard
A. Use a computed property for full name and a watch on full name to update document title
B. Use only a computed property for full name and update document title inside it
C. Use a watch on first and last names separately to update document title
D. Use a method to compute full name and call it inside watch to update document title

Solution

  1. Step 1: Separate display logic and side effects

    Computed properties are ideal for reactive display values like full name, caching the result.
  2. Step 2: Use watch for side effects

    Updating document title is a side effect, so watch the computed full name to react to changes.
  3. Final Answer:

    Use a computed property for full name and a watch on full name to update document title -> Option A
  4. Quick Check:

    Computed for values, watch for side effects [OK]
Hint: Compute values with computed, react with watch for side effects [OK]
Common Mistakes:
  • Trying to update document title inside computed (not allowed)
  • Watching first and last names separately instead of computed
  • Using methods instead of computed for reactive values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard