Tracking window size is common in responsive web design to adjust layouts or load different components based on screen size.
💼 Career
Understanding lifecycle hooks and cleanup in Vue is essential for building efficient, bug-free applications that manage resources well.
Progress0 / 4 steps
1
Setup reactive window width
Create a Vue 3 component with setup() function. Inside it, create a ref called width and set it to window.innerWidth.
Vue
Hint
Use ref from Vue to create a reactive variable.
2
Add window resize event listener
Inside the setup() function, import and use onMounted. Add a window resize event listener that updates width.value to window.innerWidth when the window resizes.
Vue
Hint
Use onMounted to add the event listener only after the component is ready.
3
Add cleanup with onUnmounted
Import onUnmounted and use it to remove the window resize event listener when the component unmounts. Store the event handler function in a variable called updateWidth so you can remove it properly.
Vue
Hint
Store the event handler in a variable so you can remove it later with removeEventListener.
4
Complete component with reactive display
Ensure the template displays the reactive width value inside a <div>. The component should update the displayed width as the window resizes and clean up the event listener on unmount.
Vue
Hint
The template should show the current window width reactively.
Practice
(1/5)
1. In Vue, which lifecycle hook is best to use for cleaning up timers or event listeners when a component is removed?
easy
A. onUpdated
B. onMounted
C. onUnmounted
D. onCreated
Solution
Step 1: Understand Vue lifecycle hooks
onMounted runs when the component appears, onUnmounted runs when it disappears.
Step 2: Identify cleanup timing
Cleanup like stopping timers or removing listeners should happen when the component is removed, so onUnmounted is the right hook.
Final Answer:
onUnmounted -> Option C
Quick Check:
Cleanup runs on unmount = C [OK]
Hint: Cleanup always goes in onUnmounted hook [OK]
Common Mistakes:
Using onMounted for cleanup
Confusing onUpdated with cleanup
Trying to cleanup in onCreated
2. Which of the following is the correct syntax to register a cleanup function in Vue's setup() using the onUnmounted hook?
easy
A. onUnmounted(() => { clearInterval(timer) })
B. onUnmounted = () => { clearInterval(timer) }
C. onUnmounted.clear(() => { clearInterval(timer) })
D. onUnmounted.clearInterval(timer)
Solution
Step 1: Recall Vue hook syntax
Vue lifecycle hooks like onUnmounted are functions that take a callback to run on that event.
Step 2: Match correct syntax
The correct way is calling onUnmounted with a function: onUnmounted(() => { ... }). Other options misuse assignment or methods.
Final Answer:
onUnmounted(() => { clearInterval(timer) }) -> Option A
Quick Check:
Hook usage = function call with callback [OK]
Hint: Hooks are called with a function, not assigned [OK]
Common Mistakes:
Assigning instead of calling onUnmounted
Using nonexistent methods on onUnmounted
Missing arrow function wrapper
3. What will be the console output when this Vue component unmounts?
A. Cleanup runs too early; should use onUnmounted instead
B. Timer is never created; setInterval is missing
C. clearInterval is called without timer variable
D. No problem; code works correctly
Solution
Step 1: Check when cleanup runs
Using onMounted to clear interval means it stops immediately after mounting, so no ticks happen.
Step 2: Correct cleanup timing
Cleanup should happen when component unmounts, so onUnmounted is the correct hook to clear the timer.
Final Answer:
Cleanup runs too early; should use onUnmounted instead -> Option A
Quick Check:
Cleanup must be on unmount, not mount [OK]
Hint: Cleanup belongs in onUnmounted, not onMounted [OK]
Common Mistakes:
Clearing timer on mount instead of unmount
Assuming onMounted is for cleanup
Ignoring lifecycle hook purpose
5. You have a Vue component that subscribes to a WebSocket in setup(). Which pattern correctly ensures the subscription is cleaned up only when the component unmounts?
setup() {
const socket = new WebSocket('wss://example.com')
socket.onmessage = (event) => console.log(event.data)
// What cleanup code and where?
}
hard
A. Call socket.close() immediately after creating socket
B. No cleanup needed for WebSocket in Vue
C. Use onMounted(() => socket.close()) to close socket on mount
D. Use onUnmounted(() => socket.close()) inside setup
Solution
Step 1: Understand WebSocket lifecycle
WebSocket stays open until closed; closing it too early stops messages.
Step 2: Place cleanup in onUnmounted
To avoid leaks, close the socket when component unmounts using onUnmounted(() => socket.close()).
Final Answer:
Use onUnmounted(() => socket.close()) inside setup -> Option D
Quick Check:
Cleanup subscriptions on unmount with onUnmounted [OK]
Hint: Close subscriptions in onUnmounted hook [OK]
Common Mistakes:
Closing socket immediately after creation
Closing socket on mount instead of unmount
Skipping cleanup causing memory leaks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.