📖 Scenario: You are building a simple React app that shows a message and updates the document title when the message changes.
🎯 Goal: Learn how to use the useEffect hook to perform side effects like updating the document title when state changes.
📋 What You'll Learn
Create a React functional component called MessageUpdater
Use useState to hold a message string
Use useEffect to update the document title whenever the message changes
Render an input box to change the message
Render the current message below the input
💡 Why This Matters
🌍 Real World
useEffect is used in React apps to run code that affects things outside the component, like updating the page title, fetching data, or setting timers.
💼 Career
Understanding useEffect is essential for React developers to handle side effects properly and build interactive, dynamic web applications.
Progress0 / 4 steps
1
Set up the message state
Create a React functional component called MessageUpdater. Inside it, use useState to create a state variable called message with initial value "Hello".
React
Hint
Use const [message, setMessage] = useState("Hello") inside the component.
2
Add useEffect to update document title
Inside the MessageUpdater component, add a useEffect hook that updates document.title to the current message whenever message changes.
React
Hint
Use useEffect(() => { document.title = message; }, [message]) to update the title when message changes.
3
Render input to change message
Render an input element inside MessageUpdater that updates the message state when the user types. Use value={message} and onChange to update message with setMessage.
React
Hint
Use <input value={message} onChange={e => setMessage(e.target.value)} /> to let user change the message.
4
Display the current message below input
Below the input, render a <p> element that shows the current message inside the MessageUpdater component.
React
Hint
Use <p>{message}</p> to show the message below the input.
Practice
(1/5)
1. What is the primary purpose of useEffect in React?
easy
A. To declare state variables inside a component
B. To create new components dynamically
C. To run code after the component renders or when data changes
D. To style components with CSS
Solution
Step 1: Understand what useEffect does
useEffect runs code after the component renders or when specified data changes.
Step 2: Compare with other React features
State variables declare data, styling is CSS, and creating components is unrelated to useEffect.
Final Answer:
To run code after the component renders or when data changes -> Option C
Quick Check:
useEffect runs code after render or data change [OK]
Hint: useEffect runs after render or data updates [OK]
Common Mistakes:
Confusing useEffect with useState
Thinking useEffect styles components
Believing useEffect creates components
2. Which of the following is the correct syntax to use useEffect that runs only once after the first render?
easy
A. useEffect(() => { console.log('Hello'); });
B. useEffect(() => { console.log('Hello'); }, []);
C. useEffect(() => { console.log('Hello'); }, true);
D. useEffect(() => { console.log('Hello'); }, null);
Solution
Step 1: Identify how to run useEffect once
Passing an empty array [] as dependency makes useEffect run only once after the first render.
Step 2: Check other options
Without dependencies (useEffect(() => { console.log('Hello'); });), it runs after every render. Options B and C pass non-array values, causing the effect to run after every render (with a React warning).
Final Answer:
useEffect(() => { console.log('Hello'); }, []); -> Option B
Quick Check:
Empty dependency array means run once [OK]
Hint: Empty array runs useEffect once after first render [OK]
Common Mistakes:
Omitting dependency array causes repeated runs
Passing non-array values thinking it runs once
Confusing [] with null or true
3. What will be logged to the console when this component runs?