📖 Scenario: You are building a simple React component that tracks how many times a button is clicked. This is like counting how many times you press a button on a game controller.
🎯 Goal: Create a React functional component that shows a number starting at zero and a button. Each time the button is clicked, the number increases by one.
📋 What You'll Learn
Use React functional components
Use the useState hook to create and update state
Display the current count in a <div>
Add a button that updates the count when clicked
💡 Why This Matters
🌍 Real World
Counting clicks or user interactions is common in web apps, like tracking likes, votes, or steps in a process.
💼 Career
Understanding how to update state in React is essential for building interactive user interfaces in modern web development jobs.
Progress0 / 4 steps
1
Set up initial state with useState
Create a React functional component called ClickCounter. Inside it, use the useState hook to create a state variable called count with the initial value 0. Also create the state updater function called setCount.
React
Hint
Remember to import useState from React. Use array destructuring to get count and setCount from useState(0).
2
Add a button to update the count
Inside the ClickCounter component, add a <button> element. Set its onClick attribute to a function that calls setCount(count + 1) to increase the count by one when clicked.
React
Hint
Use an arrow function inside onClick to call setCount(count + 1).
3
Display the current count
Modify the ClickCounter component to display the current count inside a <div> above the button. Show the text exactly as Count: {count}.
React
Hint
Use curly braces {count} inside JSX to show the current count.
4
Add accessibility and export the component
Add an aria-label attribute to the <button> with the value Increment count for accessibility. Then export the ClickCounter component as the default export.
React
Hint
Use aria-label on the button for screen readers. Use export default ClickCounter; to export.
Practice
(1/5)
1. What is the correct way to update a state variable count using the useState hook in React?
easy
A. Call the setter function like setCount(newValue) to update the state.
B. Directly assign a new value like count = newValue.
C. Use this.setState({ count: newValue }) inside the component.
D. Update the state by returning a new value from the component function.
Solution
Step 1: Understand how useState works
The useState hook returns a pair: the current state and a function to update it.
Step 2: Use the setter function to update state
To change the state, you must call the setter function with the new value, e.g., setCount(newValue).
Final Answer:
Call the setter function like setCount(newValue) to update the state. -> Option A
Quick Check:
Update state with setter function = A [OK]
Hint: Always use the setter function from useState to update state [OK]
Common Mistakes:
Trying to assign state variable directly
Using class component syntax in functional components
Returning new value instead of calling setter
2. Which of the following is the correct syntax to initialize a state variable name with value "John" using useState?
easy
A. const name = useState('John');
B. const name = useState('John')[0];
C. const [name, setName] = useState('John');
D. const {name, setName} = useState('John');
Solution
Step 1: Recall useState returns an array
The useState hook returns an array with two elements: the state variable and the setter function.
Step 2: Use array destructuring to get both
Use array destructuring syntax: const [name, setName] = useState('John'); to get both the value and setter.
Final Answer:
const [name, setName] = useState('John'); -> Option C
Quick Check:
useState returns [state, setter] array = B [OK]
Hint: Use array destructuring to get state and setter from useState [OK]
Common Mistakes:
Assigning useState result directly without destructuring
Using object destructuring instead of array
Only taking the first element without setter
3. What will be the output of the following React component when the button is clicked once?
Step 1: Understand state updates are asynchronous and batched
Both setCount(count + 1) calls use the same count value (0) because state updates are batched.
Step 2: Result after both calls
Both calls set count to 1, so after clicking, count becomes 1, not 2.
Final Answer:
1 -> Option D
Quick Check:
Multiple setState with same value = C [OK]
Hint: Multiple setState calls with same value batch to last one [OK]
Common Mistakes:
Assuming count increments twice immediately
Expecting count to be 2 after two calls
Ignoring React's batching behavior
4. Identify the error in the following React component that tries to update state on button click:
import React, { useState } from 'react';
function Toggle() {
const [isOn, setIsOn] = useState(false);
function handleClick() {
isOn = !isOn;
}
return {isOn ? 'ON' : 'OFF'};
}
medium
A. Button missing onClick handler.
B. Directly assigning to state variable instead of using setter.
C. Using incorrect initial state value.
D. Missing parentheses in function declaration.
Solution
Step 1: Check how state is updated
The code tries to assign isOn = !isOn; directly, which is not allowed for state variables.
Step 2: Correct way to update state
State must be updated by calling the setter function: setIsOn(!isOn);.
Final Answer:
Directly assigning to state variable instead of using setter. -> Option B
Quick Check:
Update state only via setter function = D [OK]
Hint: Never assign state variable directly; always use setter [OK]
Common Mistakes:
Assigning state variable directly
Forgetting to call setter function
Confusing state variable with setter
5. You want to update a state object user with a new age property without losing other properties. Which is the correct way to update state using setUser?
const [user, setUser] = useState({ name: 'Alice', age: 25 });
// Update age to 26
hard
A. setUser(prevUser => ({ ...prevUser, age: 26 }));
B. setUser({ age: 26 });
C. setUser(user.age = 26);
D. setUser(prevUser => { prevUser.age = 26 });
Solution
Step 1: Preserve existing properties when updating state object
To update one property without losing others, copy previous state using spread syntax.
Step 2: Use functional update form to get latest state
Use setUser(prevUser => ({ ...prevUser, age: 26 })) to merge old properties with new age.
Final Answer:
setUser(prevUser => ({ ...prevUser, age: 26 })); -> Option A
Quick Check:
Use spread and functional update to merge state = A [OK]
Hint: Use spread operator and functional setter to update object state [OK]
Common Mistakes:
Replacing whole object losing other properties
Mutating state directly instead of returning new object
Not using functional update when depending on previous state
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.