📖 Scenario: You are building a simple survey form in React. The form asks users to select their favorite fruits using checkboxes and choose their preferred contact method using radio buttons.
🎯 Goal: Create a React functional component that manages the state of multiple checkboxes and a group of radio buttons. The component should update the state correctly when users select or deselect checkboxes and when they choose a radio button.
📋 What You'll Learn
Use React functional components with hooks
Manage checkbox states as an object with fruit names as keys and boolean values
Manage radio button state as a single string value
Update state correctly on user interaction
Render checkboxes and radio buttons with labels
💡 Why This Matters
🌍 Real World
Forms with checkboxes and radio buttons are common in surveys, settings pages, and user preferences in web apps.
💼 Career
Understanding how to handle multiple inputs and manage their state is essential for frontend developers working with React or similar frameworks.
Progress0 / 4 steps
1
Set up initial state for checkboxes
Create a React functional component called SurveyForm. Inside it, create a state variable called fruits using useState. Initialize fruits as an object with keys apple, banana, and orange, all set to false.
React
Hint
Use useState to create fruits as an object with keys for each fruit set to false.
2
Add state for radio buttons
Inside the SurveyForm component, add a new state variable called contactMethod using useState. Initialize it with an empty string ''.
React
Hint
Use useState to create contactMethod with initial value ''.
3
Handle checkbox changes
Add a function called handleFruitChange inside SurveyForm. It should take an event parameter and update the fruits state by toggling the boolean value for the fruit matching event.target.name. Use the setFruits function and spread the previous state.
React
Hint
Use event destructuring to get name and checked. Update fruits state by copying previous state and changing the key matching name.
4
Render inputs and handle radio changes
Inside the SurveyForm component, return JSX that renders three checkboxes for apple, banana, and orange. Each checkbox should have name, checked bound to fruits[name], and onChange set to handleFruitChange. Also render two radio buttons for contact methods email and phone. Each radio should have name="contactMethod", value set to the method, checked bound to contactMethod === value, and onChange that updates contactMethod state using setContactMethod. Wrap inputs with labels for accessibility.
React
Hint
Use label tags wrapping input elements. Bind checked and onChange properly for both checkboxes and radio buttons.
Practice
(1/5)
1. Which statement best describes the difference between checkboxes and radio buttons in React?
easy
A. Both checkboxes and radio buttons allow only one selection.
B. Checkboxes allow only one selection; radio buttons allow multiple selections.
C. Both checkboxes and radio buttons allow multiple selections.
D. Checkboxes allow multiple selections; radio buttons allow only one selection.
Solution
Step 1: Understand checkbox behavior
Checkboxes let users select any number of options, including none, one, or many.
Step 2: Understand radio button behavior
Radio buttons restrict selection to exactly one option within a group.
Final Answer:
Checkboxes allow multiple selections; radio buttons allow only one selection. -> Option D
Quick Check:
Checkboxes = multiple, Radio buttons = single [OK]
Hint: Checkboxes = many choices, radios = one choice [OK]
Common Mistakes:
Confusing which input allows multiple selections
Thinking radio buttons allow multiple selections
Assuming checkboxes allow only one selection
2. Which of the following is the correct way to handle a checkbox change event in React functional components?
easy
A. <input type='checkbox' checked={checked} onClick={e => setChecked(e.target.checked)} />
B. <input type='checkbox' checked={checked} onChange={e => setChecked(e.target.checked)} />
C. <input type='checkbox' value={checked} onChange={e => setChecked(e.target.checked)} />
D. <input type='checkbox' checked={checked} onChange={e => setChecked(e.target.value)} />
Solution
Step 1: Use checked attribute for checkbox state
Checkbox uses checked prop to reflect its state, not value.
Step 2: Use onChange event and e.target.checked
The onChange event provides e.target.checked boolean to update state.
Final Answer:
<input type='checkbox' checked={checked} onChange={e => setChecked(e.target.checked)} /> -> Option B
Quick Check:
Checkbox state = checked + onChange with e.target.checked [OK]
Hint: Use checked and onChange with e.target.checked [OK]
Common Mistakes:
Using e.target.value instead of e.target.checked
Using onClick instead of onChange for checkbox
Binding value instead of checked attribute
3. What will be the output when the following React component is rendered and the user selects the "Option 2" radio button?
A. Using e.target.value instead of e.target.checked in onChange
B. Missing initial state for checked
C. Using onClick instead of onChange event
D. Not binding the checked attribute
Solution
Step 1: Check event handler usage
The onChange handler uses e.target.value, which is a string, not boolean.
Step 2: Correct property for checkbox state
Checkbox state must use e.target.checked which is boolean true/false.
Final Answer:
Using e.target.value instead of e.target.checked in onChange -> Option A
Quick Check:
Checkbox onChange must use e.target.checked [OK]
Hint: Checkbox onChange uses e.target.checked, not value [OK]
Common Mistakes:
Using e.target.value for checkbox state
Confusing onClick with onChange
Not initializing state properly
5. You want to create a React component that lets users select multiple toppings using checkboxes and shows the selected toppings below. Which approach correctly manages multiple checkbox states?
hard
A. Use separate state variables for each checkbox and ignore updating the UI on change.
B. Use a single boolean state for all checkboxes and toggle it on any change.
C. Use an array state to store selected toppings and update it by adding/removing toppings on checkbox changes.
D. Use a string state to store all toppings concatenated and update it by appending toppings on change.
Solution
Step 1: Understand multiple checkbox state needs
Multiple checkboxes require tracking which items are selected, best done with an array.
Step 2: Update array state on checkbox toggle
On change, add topping if checked, remove if unchecked, keeping UI in sync.
Final Answer:
Use an array state to store selected toppings and update it by adding/removing toppings on checkbox changes. -> Option C
Quick Check:
Multiple checkboxes = array state with add/remove [OK]
Hint: Use array state to track multiple checkbox selections [OK]
Common Mistakes:
Using single boolean for multiple checkboxes
Not updating UI after state change
Concatenating strings instead of using arrays
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.