Bird
Raised Fist0
Vueframework~8 mins

Props for parent to child data in Vue - Performance & Optimization

Choose your learning style10 modes available
Performance: Props for parent to child data
MEDIUM IMPACT
This affects the rendering speed and responsiveness by controlling how data flows from parent to child components in Vue.
Passing data from a parent component to a child component
Vue
<template>
  <ChildComponent :a="complexObject.a" />
</template>
<script setup>
import { reactive } from 'vue'
const complexObject = reactive({ a: 1, b: 2, c: 3 })
</script>
Passing only the needed primitive prop reduces unnecessary reactivity and re-renders in the child.
📈 Performance GainSingle re-render only when the specific prop changes
Passing data from a parent component to a child component
Vue
<template>
  <ChildComponent :data="complexObject" />
</template>
<script setup>
import { reactive } from 'vue'
const complexObject = reactive({ a: 1, b: 2, c: 3 })
</script>
Passing a large reactive object directly causes the child to re-render on any change, even if unrelated to the child's needs.
📉 Performance CostTriggers multiple re-renders and recalculations on every reactive change
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Passing large reactive object as propHigh (many reactive dependencies)Multiple reflows on any changeHigh paint cost due to frequent updates[X] Bad
Passing only needed primitive propsLow (minimal reactive dependencies)Single reflow on prop changeLow paint cost with fewer updates[OK] Good
Rendering Pipeline
When props change, Vue triggers reactive updates that flow through style recalculation, layout, paint, and composite stages. Minimizing prop changes reduces these costly steps.
→Reactive Update
→Virtual DOM Diffing
→Layout
→Paint
⚠️ BottleneckReactive Update and Virtual DOM Diffing when many props or large objects change
Core Web Vital Affected
INP
This affects the rendering speed and responsiveness by controlling how data flows from parent to child components in Vue.
Optimization Tips
1Pass only the props the child component actually needs.
2Avoid passing large reactive objects directly as props.
3Use primitive values for props to minimize reactivity overhead.
Performance Quiz - 3 Questions
Test your performance knowledge
What is a performance benefit of passing only needed primitive props instead of a large reactive object?
AReduces unnecessary re-renders in child components
BIncreases bundle size
CTriggers more layout recalculations
DBlocks rendering longer
DevTools: Performance
How to check: Record a performance profile while interacting with the component. Look for frequent component re-renders and reactive updates.
What to look for: Excessive component updates or long scripting times indicate inefficient prop usage.

Practice

(1/5)
1. What is the main purpose of props in Vue components?
easy
A. To pass data from a parent component to a child component
B. To store local state inside a component
C. To handle user input events
D. To define methods inside a component

Solution

  1. Step 1: Understand the role of props

    Props are designed to send data from a parent component down to its child components.
  2. Step 2: Differentiate props from other features

    Local state stores data inside a component, events handle user actions, and methods define functions. Only props pass data downward.
  3. Final Answer:

    To pass data from a parent component to a child component -> Option A
  4. Quick Check:

    Props = Parent to Child Data [OK]
Hint: Props always send data from parent to child [OK]
Common Mistakes:
  • Confusing props with local state
  • Thinking props handle events
  • Assuming props define methods
2. Which of the following is the correct way to declare a prop named title in a Vue 3 child component using <script setup>?
easy
A. const props = defineProps({ title: String })
B. props: ['title']
C. export default { props: ['title'] }
D. const title = ref('')

Solution

  1. Step 1: Identify Vue 3 <script setup> syntax

    In Vue 3 with <script setup>, props are declared using defineProps().
  2. Step 2: Match the correct syntax for prop declaration

    const props = defineProps({ title: String }) correctly declares a prop named title of type String.
  3. Final Answer:

    const props = defineProps({ title: String }) -> Option A
  4. Quick Check:

    Vue 3 <script setup> uses defineProps() [OK]
Hint: Use defineProps() inside
Common Mistakes:
  • Using options API syntax inside
  • Declaring props as local refs
  • Forgetting to use defineProps() in
3. Given the parent component template:
<ChildComponent :message="'Hello Vue'" />

And the child component script setup:
const props = defineProps({ message: String })
console.log(props.message)

What will be logged to the console?
medium
A. undefined
B. 'Hello Vue'
C. An error because props.message is read-only
D. null

Solution

  1. Step 1: Understand prop passing

    The parent passes the string 'Hello Vue' as the message prop to the child.
  2. Step 2: Accessing the prop in child

    The child uses defineProps to declare message and logs props.message, which holds 'Hello Vue'.
  3. Final Answer:

    'Hello Vue' -> Option B
  4. Quick Check:

    Passed prop value logs correctly [OK]
Hint: Props hold passed values, accessible via props object [OK]
Common Mistakes:
  • Expecting props to be undefined without declaration
  • Confusing read-only with inaccessible
  • Assuming props are null if not reactive
4. What is wrong with this child component code that tries to modify a prop?
<script setup>
const props = defineProps({ count: Number })
props.count = props.count + 1
</script>
medium
A. Props must be declared as reactive refs to modify
B. The prop type Number is invalid in defineProps
C. Missing import of defineProps
D. Props are read-only and cannot be assigned new values

Solution

  1. Step 1: Recall prop immutability

    Props in Vue are read-only inside child components and cannot be directly modified.
  2. Step 2: Identify the error in code

    The code tries to assign a new value to props.count, which violates the read-only rule and causes an error.
  3. Final Answer:

    Props are read-only and cannot be assigned new values -> Option D
  4. Quick Check:

    Props cannot be changed inside child [OK]
Hint: Never assign new values to props inside child [OK]
Common Mistakes:
  • Trying to mutate props directly
  • Confusing props with reactive state
  • Ignoring Vue warnings about prop mutation
5. You want to pass a list of user names from a parent to a child component and display them. Which approach correctly passes and uses the prop in the child component using Vue 3 <script setup>?

Parent template:
<UserList :users="['Alice', 'Bob', 'Charlie']" />

Choose the correct child component code:
hard
A.
<script setup>
export default {
  props: ['users']
}
</script>
<template>
  <ul>
    <li v-for="user in users" :key="user">{{ user }}</li>
  </ul>
</template>
B.
<script setup>
const users = ref([])
</script>
<template>
  <ul>
    <li v-for="user in users" :key="user">{{ user }}</li>
  </ul>
</template>
C.
<script setup>
const props = defineProps({ users: Array })
</script>
<template>
  <ul>
    <li v-for="user in props.users" :key="user">{{ user }}</li>
  </ul>
</template>
D.
<script setup>
const props = defineProps({ users: String })
</script>
<template>
  <ul>
    <li v-for="user in props.users" :key="user">{{ user }}</li>
  </ul>
</template>

Solution

  1. Step 1: Check prop declaration type

    The parent passes an array, so the child must declare users as type Array using defineProps({ users: Array }).
  2. Step 2: Verify template usage

    The child uses v-for to loop over props.users and display each user in a list item, which is correct.
  3. Final Answer:

    The code using defineProps({ users: Array }) and v-for on props.users -> Option C
  4. Quick Check:

    Array prop with defineProps and v-for works [OK]
Hint: Match prop type to passed data and loop in template [OK]
Common Mistakes:
  • Declaring wrong prop type (e.g., String instead of Array)
  • Not using defineProps in
  • Trying to mutate props inside child
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