Bird
Raised Fist0
Reactframework~20 mins

Why lifting state is needed in React - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
State Lifting Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Why do we lift state up in React?
Imagine two sibling components need to share some data. Why is lifting state up to their common parent useful?
AIt allows both siblings to access and update the shared state from a single source of truth.
BIt duplicates the state in both siblings to keep them independent.
CIt moves the state to a global variable outside React components.
DIt prevents any component from updating the state to avoid bugs.
Attempts:
2 left
💡 Hint
Think about how components communicate and keep data consistent.
❓ component_behavior
intermediate
2:00remaining
What happens if state is not lifted up?
Two sibling components each have their own state for the same data. What problem will likely occur?
AThe components will merge their states behind the scenes.
BThey will have inconsistent data because each manages its own copy.
CThey will automatically sync their states without extra code.
DReact will throw an error about duplicate states.
Attempts:
2 left
💡 Hint
Think about what happens when two people keep separate notes about the same thing.
❓ state_output
advanced
2:30remaining
What is the output after lifting state up?
Given a parent component holding a count state and passing it to two child buttons, what happens when one button increments the count?
React
function Parent() {
  const [count, setCount] = React.useState(0);
  return (
    <>
      <ChildButton count={count} onClick={() => setCount(count + 1)} />
      <ChildDisplay count={count} />
    </>
  );
}

function ChildButton({ count, onClick }) {
  return <button onClick={onClick}>Increment: {count}</button>;
}

function ChildDisplay({ count }) {
  return <p>Current count: {count}</p>;
}
AClicking the button does not update any count because state is not shared.
BClicking the button updates only the button label, display stays the same.
CClicking the button updates the count in Parent, so both button label and display show the new count.
DClicking the button updates only the display, button label stays the same.
Attempts:
2 left
💡 Hint
State is held in Parent and passed down as props to both children.
📝 Syntax
advanced
2:00remaining
Identify the correct way to lift state up in React
Which code snippet correctly lifts state up to a parent component and passes it down to children?
AParent holds state and passes value and setter as props to children; children call setter to update state.
BChildren hold their own state and pass it up to Parent via props.
CParent holds state but children create their own independent states ignoring props.
DState is declared inside children and Parent does not manage any state.
Attempts:
2 left
💡 Hint
Remember: lifting state means the parent owns the state and children receive it via props.
🔧 Debug
expert
3:00remaining
Why does this lifted state example cause a stale closure bug?
In this code, clicking the button does not update the count as expected. What is the cause?
React
function Parent() {
  const [count, setCount] = React.useState(0);
  const increment = React.useCallback(() => {
    setCount(count + 1);
  }, []);
  return <ChildButton onClick={increment} />;
}

function ChildButton({ onClick }) {
  return <button onClick={onClick}>Increment</button>;
}
AReact.useState is used incorrectly; it should be React.state.
BThe setCount function is not called correctly because onClick is missing parentheses.
CThe ChildButton does not receive the onClick prop properly, so button does nothing.
DThe increment function closes over the initial count value, so setCount always sets count to 1.
Attempts:
2 left
💡 Hint
Think about how JavaScript closures capture variables in functions.

Practice

(1/5)
1. Why do we lift state up in React?
lifting state means moving state to a common parent component. What is the main reason for this?
easy
A. To improve the styling of components
B. To share the same state between multiple child components
C. To avoid using props in child components
D. To make each child component have its own separate state

Solution

  1. Step 1: Understand what lifting state means

    Lifting state means moving state from child components to their common parent.
  2. Step 2: Identify the purpose of lifting state

    This is done so multiple children can share and update the same state, keeping data consistent.
  3. Final Answer:

    To share the same state between multiple child components -> Option B
  4. Quick Check:

    Sharing state = lifting state [OK]
Hint: Lifting state shares data between siblings via parent [OK]
Common Mistakes:
  • Thinking lifting state is for styling
  • Believing lifting state means separate states
  • Confusing lifting state with removing props
2. Which of the following is the correct way to lift state up in React?
easy
A. Use global variables instead of React state
B. Keep the state inside each child component separately
C. Move the state to the nearest common parent and pass it down as props
D. Remove state and use only static values

Solution

  1. Step 1: Recall the pattern of lifting state

    State should be moved to the nearest common parent component to share it.
  2. Step 2: Check the options for correct syntax

    Passing state down as props from the parent is the correct React pattern.
  3. Final Answer:

    Move the state to the nearest common parent and pass it down as props -> Option C
  4. Quick Check:

    Lift state = parent state + props down [OK]
Hint: Lift state to parent, pass as props down [OK]
Common Mistakes:
  • Keeping state only in children
  • Using global variables instead of React state
  • Removing state completely
3. Consider this React code snippet:
function Parent() {
  const [count, setCount] = React.useState(0);
  return (
    <>
      
      
    </>
  );
}

function ChildA({ count }) {
  return <div>Count: {count}</div>;
}

function ChildB({ setCount }) {
  return <button onClick={() => setCount(c => c + 1)}>Increment</button>;
}

What will happen when the button in ChildB is clicked?
medium
A. Nothing will change because state is not shared
B. The button will disappear
C. An error will occur because setCount is not passed correctly
D. The count displayed in ChildA will increase by 1

Solution

  1. Step 1: Understand state lifting in the code

    The state count is in Parent and passed down to ChildA and ChildB.
  2. Step 2: Analyze what happens on button click

    Clicking button calls setCount which updates count in Parent, causing ChildA to re-render with new count.
  3. Final Answer:

    The count displayed in ChildA will increase by 1 -> Option D
  4. Quick Check:

    Shared state update re-renders children [OK]
Hint: State in parent updates all children using it [OK]
Common Mistakes:
  • Thinking state is local to ChildB only
  • Assuming no re-render happens on state change
  • Confusing props with state setters
4. You have two sibling components that need to share a counter state. You put the state inside one sibling and try to pass it to the other directly. Why is this a problem?
medium
A. Because siblings cannot directly share state; state must be lifted to their parent
B. Because React does not allow state in functional components
C. Because state can only be stored in global variables
D. Because props cannot be passed between siblings

Solution

  1. Step 1: Understand React state sharing rules

    State lives inside a component and cannot be directly shared between sibling components.
  2. Step 2: Identify correct sharing method

    To share state, it must be lifted to the nearest common parent, which passes it down as props.
  3. Final Answer:

    Because siblings cannot directly share state; state must be lifted to their parent -> Option A
  4. Quick Check:

    Siblings share state via parent [OK]
Hint: Siblings share state only via parent component [OK]
Common Mistakes:
  • Thinking siblings can share state directly
  • Believing React forbids state in functional components
  • Confusing props passing between siblings
5. You have three components: Grandparent, Parent, and two siblings Child1 and Child2. Both children need to update and display the same piece of state. Where should you lift the state to and why?
hard
A. Lift the state to Parent because it is the nearest common ancestor of the children
B. Lift the state to Grandparent to make it global for all components
C. Keep the state inside Child1 and pass it to Child2 directly
D. Create separate states in both children and sync them manually

Solution

  1. Step 1: Identify the nearest common ancestor of the siblings

    The siblings Child1 and Child2 share the Parent component as their closest common parent.
  2. Step 2: Decide where to lift state for sharing

    Lifting state to Parent allows both children to access and update the same state easily without unnecessary complexity.
  3. Final Answer:

    Lift the state to Parent because it is the nearest common ancestor of the children -> Option A
  4. Quick Check:

    Lift state to nearest common parent [OK]
Hint: Lift state to nearest common parent of siblings [OK]
Common Mistakes:
  • Lifting state too high unnecessarily
  • Trying to share state directly between siblings
  • Duplicating state in multiple components
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard