📖 Scenario: You are creating a simple React app that shows different colored buttons. Instead of writing the button code again and again, you want to make a reusable button component that can show different text and colors.
🎯 Goal: Build a reusable React button component called ColorButton that accepts text and color as props and renders a styled button. Then use this component multiple times with different texts and colors.
📋 What You'll Learn
Create a functional React component named ColorButton.
The ColorButton component must accept text and color props.
Use inline styles to set the button's background color using the color prop.
Render three ColorButton components with texts: Save, Cancel, and Delete.
Use colors: green for Save, gray for Cancel, and red for Delete.
💡 Why This Matters
🌍 Real World
Reusable components save time and reduce errors by letting developers write code once and use it many times with different data.
💼 Career
Understanding reusable components is essential for React developers to build scalable and maintainable user interfaces.
Progress0 / 4 steps
1
Create the ColorButton component skeleton
Create a functional React component called ColorButton that accepts props and returns a button element with the text Click me inside.
React
Hint
Start by writing a function named ColorButton that returns a simple button with fixed text.
2
Add props for text and color
Modify the ColorButton component to accept text and color props. Use text as the button's displayed text and set the button's background color style to the color prop.
React
Hint
Use props.text inside the button and set style={{ backgroundColor: props.color }} on the button element.
3
Render three ColorButton components with different props
In the main App component, render three ColorButton components with these exact props: text="Save" and color="green", text="Cancel" and color="gray", and text="Delete" and color="red".
React
Hint
Use the ColorButton component three times inside App with the exact props given.
4
Export App component as default
Add the line export default App; at the end of the file to export the App component.
React
Hint
Write export default App; at the end to make the App component usable by React.
Practice
(1/5)
1. What is the main benefit of using reusable components in React?
easy
A. They make your app run faster by default
B. They let you write less code and keep your app organized
C. They automatically fix bugs in your code
D. They prevent users from clicking buttons
Solution
Step 1: Understand the purpose of reusable components
Reusable components are designed to be used multiple times to avoid repeating code.
Step 2: Identify the main benefit
Using reusable components helps keep the app organized and reduces the amount of code you write.
Final Answer:
They let you write less code and keep your app organized -> Option B
Quick Check:
Reusable components = less code + organized app [OK]
Hint: Reusable means use again to save code and stay organized [OK]
Common Mistakes:
Thinking reusable components speed up the app automatically
Believing they fix bugs without coding
Confusing reusable components with user interaction controls
2. Which of the following is the correct way to pass a prop named title with value "Hello" to a reusable component Card?
easy
A. <Card title=Hello />
B. <Card title={Hello} />
C. <Card "Hello"=title />
D. <Card title="Hello" />
Solution
Step 1: Recall JSX prop syntax
Props are passed as attributes with name and value inside quotes or curly braces for expressions.
Step 2: Check each option
<Card title="Hello" /> uses correct syntax: title="Hello". <Card title={Hello} /> misses quotes around string. <Card title=Hello /> lacks quotes or braces. <Card "Hello"=title /> has incorrect attribute format.
Final Answer:
<Card title="Hello" /> -> Option D
Quick Check:
Props need name="value" syntax [OK]
Hint: Props look like HTML attributes with quotes [OK]
Common Mistakes:
Forgetting quotes around string prop values
Using curly braces without variables
Swapping prop name and value order
3. What will be the output of this React component usage?
In JSX, string prop values must be in quotes or curly braces.
Step 2: Identify the error
The usage <Button label=Submit /> lacks quotes around "Submit" causing syntax error.
Final Answer:
Missing quotes around the prop value in usage -> Option C
Quick Check:
String props need quotes [OK]
Hint: String props always need quotes in JSX [OK]
Common Mistakes:
Thinking button must be wrapped in div
Believing props can't be used inside JSX
Using lowercase component names
5. You want to create a reusable List component that shows items with a custom renderItem prop function. Which approach correctly uses renderItem inside the component?
hard
A.
function List(props) {
return <ul>{
props.items.map(item => <li>{props.renderItem(item)}</li>)
}</ul>;
}
B.
function List(props) {
return <ul>{
props.items.map(props.renderItem(item))
}</ul>;
}
C.
function List(props) {
return <ul>{
props.renderItem(props.items)
}</ul>;
}
D.
function List(props) {
return <ul>{
props.items.forEach(item => props.renderItem(item))
}</ul>;
}
Solution
Step 1: Understand how to use renderItem with map
To render a list, use map to transform each item into JSX, calling renderItem for each.
Step 2: Check each option
function List(props) {
return <ul>{
props.items.map(item => <li>{props.renderItem(item)}</li>)
}</ul>;
}
correctly maps items and calls renderItem inside <li>.
function List(props) {
return <ul>{
props.items.map(props.renderItem(item))
}</ul>;
}
calls renderItem incorrectly inside map.
function List(props) {
return <ul>{
props.renderItem(props.items)
}</ul>;
}
calls renderItem once with whole array.
function List(props) {
return <ul>{
props.items.forEach(item => props.renderItem(item))
}</ul>;
}
uses forEach which returns undefined, so no output.
Final Answer:
Option A uses map and renderItem correctly inside list -> Option A
Quick Check:
Use map with renderItem for lists [OK]
Hint: Use map with renderItem inside JSX to render lists [OK]
Common Mistakes:
Using forEach instead of map for rendering
Calling renderItem outside map or with wrong argument
Passing whole array to renderItem instead of single item
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.