---
title: Use immediate Option Instead of Duplicate Initial Call
impact: LOW
impactDescription: Duplicate code for initial call and watch callback reduces maintainability
type: efficiency
tags: [vue3, watch, watchers, immediate, best-practices, DRY]
---
# Use immediate Option Instead of Duplicate Initial Call
**Impact: LOW** - Calling a function manually at setup and also in a watcher leads to duplicate code. The `immediate: true` option runs the watcher callback immediately with the current value, combining both behaviors.
## Task Checklist
- [ ] Use `{ immediate: true }` instead of calling handler in onMounted/created
- [ ] Consider `watchEffect` as an alternative (always runs immediately)
- [ ] Remember immediate callback receives `undefined` as oldValue on first run
**Incorrect:**
```vue
```
```javascript
// Options API - BAD: Duplicate in created and watch
export default {
data() {
return { userId: 1, userData: null }
},
created() {
this.loadUser() // Initial call
},
watch: {
userId() {
this.loadUser() // On change - duplicate!
}
},
methods: {
async loadUser() {
const response = await fetch(`/api/users/${this.userId}`)
this.userData = await response.json()
}
}
}
```
**Correct:**
```vue
```
```javascript
// Options API - GOOD: Using immediate option
export default {
data() {
return { userId: 1, userData: null }
},
watch: {
userId: {
async handler(newId) {
const response = await fetch(`/api/users/${newId}`)
this.userData = await response.json()
},
immediate: true
}
}
}
```
## Alternative: watchEffect
```vue
```
## Handling oldValue on Initial Run
```vue
```
## One-Time Watch with once Option
```vue
```
## Reference
- [Vue.js Watchers - Eager Watchers](https://vuejs.org/guide/essentials/watchers.html#eager-watchers)