📖 Scenario: You are building a simple React app that shows a list of fruits. When you click a fruit's button, it should show an alert with the fruit's name.
🎯 Goal: Create a React functional component that renders buttons for each fruit. When a button is clicked, it calls a handler function with the fruit name as an argument.
📋 What You'll Learn
Create a list of fruits as an array
Create a handler function that accepts a fruit name argument
Render buttons for each fruit using map
Pass the fruit name argument to the handler when a button is clicked
💡 Why This Matters
🌍 Real World
Passing arguments to event handlers is common in React apps to identify which item was interacted with, like selecting a product or toggling a setting.
💼 Career
Understanding how to pass arguments to handlers is essential for React developers to build interactive and dynamic user interfaces.
Progress0 / 4 steps
1
Create the fruits array
Create a constant array called fruits with these exact string values: 'Apple', 'Banana', 'Cherry'.
React
Hint
Use const fruits = ['Apple', 'Banana', 'Cherry']; to create the array.
2
Create the handler function
Create a function called handleClick that takes one parameter called fruit. Inside the function, call alert with the message `You clicked ${fruit}` using a template string.
React
Hint
Define function handleClick(fruit) { alert(`You clicked ${fruit}`); }.
3
Render buttons for each fruit
Create a React functional component called FruitButtons. Inside it, return a <div> that contains a fruits.map call. Use fruit as the iterator variable. For each fruit, render a <button> with the text {fruit}.
React
Hint
Use fruits.map(fruit => <button key={fruit}>{fruit}</button>) inside the return.
4
Pass fruit argument to click handler
In the FruitButtons component, add an onClick attribute to each <button>. Set it to an arrow function that calls handleClick with the current fruit as argument.
React
Hint
Use onClick={() => handleClick(fruit)} on the button.
Practice
(1/5)
1. What is the correct way to pass an argument id to a click handler in React without calling the function immediately?
easy
A. onClick={handleClick.bind(id)}
B. onClick={() => handleClick(id)}
C. onClick={handleClick}
D. onClick={handleClick(id)}
Solution
Step 1: Understand function call vs function reference
Using handleClick(id) calls the function immediately, which is not desired on render.
Step 2: Use arrow function to delay call
Wrapping the call in an arrow function () => handleClick(id) passes a function reference that calls handleClick with id only when clicked.
Final Answer:
onClick={() => handleClick(id)} -> Option B
Quick Check:
Use arrow function to pass argument without immediate call [OK]
Hint: Wrap call in arrow function to pass args without running [OK]
Common Mistakes:
Calling function directly in JSX causing immediate execution
Using bind incorrectly without context
Passing function reference without arguments
2. Which of the following is the correct syntax to pass multiple arguments event and id to a handler handleClick in React?
easy
A. onClick={handleClick(event, id)}
B. onClick={() => handleClick(event, id)}
C. onClick={handleClick.bind(id, event)}
D. onClick={(event) => handleClick(event, id)}
Solution
Step 1: Recognize event parameter handling
The event object is passed automatically by React to the event handler, so it must be received as a parameter.
Step 2: Use arrow function to pass extra argument
Using (event) => handleClick(event, id) correctly receives the event and passes both event and id to the handler.
Final Answer:
onClick={(event) => handleClick(event, id)} -> Option D
Quick Check:
Arrow function with event param passes multiple args correctly [OK]
Hint: Use arrow with event param to pass event plus extra args [OK]
Step 1: Understand the arrow function usage in onClick
The onClick uses an arrow function that calls handleClick(5) when clicked, passing 5 as argument.
Step 2: Check what handleClick logs
handleClick logs the string plus the passed id, so it logs 'Clicked id: 5'.
Final Answer:
Clicked id: 5 -> Option A
Quick Check:
Arrow function calls handler with 5, logs 'Clicked id: 5' [OK]
Hint: Arrow function calls handler with argument on click [OK]
Common Mistakes:
Expecting immediate log on render
Confusing function reference with function call
Ignoring argument passed inside arrow function
4. Identify the error in this React code snippet:
function ListItem({ id }) {
return <li onClick={handleClick(id)}>Item {id}</li>;
function handleClick(id) {
alert('Clicked ' + id);
}
}
medium
A. The alert syntax is incorrect
B. handleClick is not defined inside the component
C. handleClick is called immediately during render, not on click
D. The onClick attribute should be on a button, not li
Solution
Step 1: Check how onClick is assigned
Using onClick={handleClick(id)} calls handleClick immediately during render, which is wrong.
Step 2: Correct way to assign onClick
It should be wrapped in a function like onClick={() => handleClick(id)} to call on user click.
Final Answer:
handleClick is called immediately during render, not on click -> Option C
Quick Check:
Direct call in JSX runs function immediately, must wrap in arrow [OK]
Hint: Wrap handler call in arrow to avoid immediate execution [OK]
Common Mistakes:
Calling handler directly in JSX
Misplacing function definition
Thinking alert syntax is wrong
5. You want to create a list of buttons that alert their own index when clicked. Which code correctly passes the index to the handler without causing all alerts on render?