Challenge - 5 Problems
Vue Watcher Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate2:00remaining
What happens when the watched property changes?
Consider this Vue 3 component using the Composition API. What will be logged to the console when the
count value changes from 0 to 1?Vue
import { ref, watch } from 'vue'; export default { setup() { const count = ref(0); watch(count, (newVal, oldVal) => { console.log(`Count changed from ${oldVal} to ${newVal}`); }); return { count }; } };
Attempts:
2 left
💡 Hint
Remember that the watcher callback receives the new and old values in that order.
✗ Incorrect
The watcher listens to changes on the reactive
count. When count changes from 0 to 1, the callback logs the old and new values accordingly.❓ state_output
intermediate2:00remaining
What is the value of
message after the watcher runs?In this Vue 3 component, what will be the value of
message after name changes from 'Alice' to 'Bob'?Vue
import { ref, watch } from 'vue'; export default { setup() { const name = ref('Alice'); const message = ref(''); watch(name, (newName) => { message.value = `Hello, ${newName}!`; }); return { name, message }; } };
Attempts:
2 left
💡 Hint
The watcher updates
message whenever name changes.✗ Incorrect
When
name changes to 'Bob', the watcher sets message to 'Hello, Bob!'.📝 Syntax
advanced2:00remaining
Which watcher syntax correctly watches multiple sources?
You want to watch two reactive refs
a and b and run a callback when either changes. Which option uses the correct Vue 3 watcher syntax?Vue
import { ref, watch } from 'vue'; const a = ref(1); const b = ref(2); // Which watcher is correct?
Attempts:
2 left
💡 Hint
To watch multiple refs, pass an array of sources as the first argument.
✗ Incorrect
Option B correctly passes an array of refs to watch and destructures new and old values in the callback. Other options use invalid syntax or types.
🔧 Debug
advanced2:00remaining
Why does this watcher not trigger on nested object property change?
Given this Vue 3 component, why does the watcher not run when
user.name changes?Vue
import { reactive, watch } from 'vue'; export default { setup() { const user = reactive({ name: 'Alice', age: 30 }); watch(user, (newUser) => { console.log('User changed:', newUser); }, { deep: true }); // Later in code: user.name = 'Bob'; return { user }; } };
Attempts:
2 left
💡 Hint
By default, watchers do not track nested property changes unless specified.
✗ Incorrect
Vue watchers on reactive objects watch only the reference by default. To watch nested properties, you must set the
deep: true option.🧠 Conceptual
expert2:00remaining
What is the effect of immediate option in watchers?
In Vue 3, what happens when you add
immediate: true to a watcher?Vue
import { ref, watch } from 'vue'; const count = ref(0); watch(count, (newVal, oldVal) => { console.log('Count changed:', newVal); }, { immediate: true });
Attempts:
2 left
💡 Hint
Immediate watchers run the callback once right after setup.
✗ Incorrect
Setting
immediate: true causes the watcher callback to run once immediately with the current value, then on every subsequent change.