Bird
Raised Fist0
Vueframework~10 mins

Props for parent to child data in Vue - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Props for parent to child data
Parent Component
↓
Child Component
↓
Use props in template or script
↓
Render child with passed data
The parent sends data to the child using props. The child receives and uses this data to render or compute.
Execution Sample
Vue
<template>
  <ChildComponent :message="parentMessage" />
</template>
<script setup>
const parentMessage = 'Hello from Parent'
</script>
Parent passes a message string to ChildComponent via a prop named 'message'.
Execution Table
StepActionParent DataProp PassedChild ReceivesChild Renders
1Parent defines 'parentMessage' = 'Hello from Parent'parentMessage = 'Hello from Parent'N/AN/AN/A
2Parent renders <ChildComponent :message='parentMessage' />parentMessage = 'Hello from Parent'message = 'Hello from Parent'N/AN/A
3Child receives prop 'message'parentMessage = 'Hello from Parent'message = 'Hello from Parent'message = 'Hello from Parent'N/A
4Child renders template using 'message'parentMessage = 'Hello from Parent'message = 'Hello from Parent'message = 'Hello from Parent'Displays: Hello from Parent
💡 Child renders with the prop value passed from parent; flow ends after rendering.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
parentMessageundefined'Hello from Parent''Hello from Parent''Hello from Parent''Hello from Parent'
message (prop in child)undefinedundefined'Hello from Parent''Hello from Parent''Hello from Parent'
Key Moments - 2 Insights
Why does the child component have access to 'message' even though it is defined in the parent?
Because the parent passes 'parentMessage' as a prop named 'message' to the child (see execution_table step 2 and 3). Props are how parents share data with children.
What happens if the parent changes 'parentMessage' after initial render?
The child will automatically receive the updated prop value and re-render with the new data, because props are reactive in Vue (not shown in this static trace but important to know).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what value does the child receive for 'message'?
A'Hello from Parent'
Bundefined
Cnull
DAn empty string
💡 Hint
Check the 'Child Receives' column at step 3 in the execution_table.
At which step does the parent pass the prop to the child?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Prop Passed' column in the execution_table.
If the parentMessage changed to 'Hi there!' after step 1, what would the child render at step 4?
AHello from Parent
Bundefined
CHi there!
DError
💡 Hint
Props are reactive; the child renders the current prop value (see variable_tracker for parentMessage).
Concept Snapshot
Props let a parent send data to a child component.
Parent passes data using :propName="value" syntax.
Child declares props to receive them.
Child uses props in template or script.
Props are reactive and update child on change.
Full Transcript
In Vue, a parent component can send data to a child component using props. The parent defines a variable, for example 'parentMessage', and passes it to the child using the syntax :message="parentMessage". The child component receives this data as a prop named 'message'. The child can then use this prop in its template to display or use the data. This flow is reactive, so if the parent changes the data, the child updates automatically. The execution steps show the parent defining data, passing it as a prop, the child receiving it, and finally rendering it. Variables like 'parentMessage' and 'message' track the data as it moves from parent to child.

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