Discover how a small change lets you reuse code smarter and faster!
Why Composable accepting parameters in Vue? - Purpose & Use Cases
Imagine you want to reuse a piece of logic in several parts of your Vue app, but each time with slightly different settings or data.
You try copying the same code everywhere and changing values manually.
Copying code leads to mistakes and makes your app hard to maintain.
If you want to change the logic, you must update every copy separately, which is slow and error-prone.
Composable functions that accept parameters let you write the logic once and customize it easily wherever you use it.
This keeps your code clean, reusable, and easy to update.
import { ref } from 'vue'; function useCounter() { let count = ref(0); function increment() { count.value++ } return { count, increment } } // duplicated with manual changes
import { ref } from 'vue'; function useCounter(start = 0) { let count = ref(start); function increment() { count.value++ } return { count, increment } } // reusable with different starts
You can create flexible, reusable logic blocks that adapt to different needs without rewriting code.
Building a form input handler that works for text, numbers, or dates by passing the input type as a parameter.
Manual code duplication is slow and risky.
Composable parameters make logic reusable and customizable.
This leads to cleaner, easier-to-maintain Vue apps.
Practice
What is the main purpose of passing parameters to a Vue composable function?
Solution
Step 1: Understand composable functions
Composable functions are reusable pieces of logic in Vue that can be shared across components.Step 2: Role of parameters in composables
Parameters allow passing different inputs to the composable so it can behave differently depending on the need.Final Answer:
To customize the composable's behavior for different uses -> Option AQuick Check:
Parameters customize composables = A [OK]
- Thinking composables run only once
- Believing parameters disable reactivity
- Confusing composables with templates
Which of the following is the correct way to define a composable that accepts a parameter initialCount?
function useCounter(???) {
const count = ref(initialCount)
return { count }
}Solution
Step 1: Check JavaScript function parameter syntax
In JavaScript, function parameters are named without types or parentheses inside the parentheses.Step 2: Match parameter name with usage
The parameterinitialCountmust be declared inside the parentheses asinitialCount.Final Answer:
useCounter(initialCount) -> Option CQuick Check:
Function parameter syntax = D [OK]
- Adding types like in TypeScript without syntax
- Using parentheses inside parameter list
- Leaving parameters empty when needed
Given this composable and usage, what will be logged?
import { ref } from 'vue'
function useGreeting(name) {
const greeting = ref(`Hello, ${name}!`)
return { greeting }
}
const { greeting } = useGreeting('Alice')
console.log(greeting.value)Solution
Step 1: Understand parameter passing
The composable receives 'Alice' as thenameparameter, so the greeting string becomes "Hello, Alice!".Step 2: Accessing the ref value
Thegreetingis a ref, so to get the string, we usegreeting.value, which logs "Hello, Alice!".Final Answer:
"Hello, Alice!" -> Option BQuick Check:
Ref .value logs "Hello, Alice!" = C [OK]
- Logging the ref object instead of its value
- Confusing parameter name with string literal
- Forgetting to import ref from 'vue'
Identify the error in this composable that accepts a parameter start:
import { ref } from 'vue'
function useTimer(start) {
const time = ref(start)
function increment() {
time++
}
return { time, increment }
}Solution
Step 1: Check how ref values are updated
Refs hold their value inside the.valueproperty, so you cannot increment the ref itself.Step 2: Identify correct increment syntax
The increment function should updatetime.value++instead oftime++.Final Answer:
Cannot increment a ref directly with ++ operator -> Option AQuick Check:
Update ref via .value, not ref itself = B [OK]
- Trying to increment ref without .value
- Thinking parameters must be reactive
- Forgetting to return functions from composable
You want a composable useFilteredList that accepts an array and a filter function as parameters. Which implementation correctly applies the filter reactively?
import { computed } from 'vue'
function useFilteredList(list, filterFn) {
const filtered = computed(() => ??? )
return { filtered }
}What should replace ????
Solution
Step 1: Understand composable parameters
Thelistparameter is expected to be aref(array)for proper reactivity in Vue composables.Step 2: Reactive filtering with computed
Inside thecomputed, access the array value withlist.value.filter(filterFn)to apply the filter reactively whenever the list changes.Final Answer:
list.value.filter(filterFn) -> Option DQuick Check:
computed(() => list.value.filter(filterFn)) = C [OK]
- Using list.filter(filterFn) without .value when list is ref
- Calling filterFn(list) instead of list.filter(filterFn)
- Unnecessarily nesting computed inside computed
Ready to prove it?
Pass the test and this pattern moves unknown
