Bird
Raised Fist0
Reactframework~8 mins

State vs props comparison in React - Performance Comparison

Choose your learning style10 modes available
Performance: State vs props comparison
MEDIUM IMPACT
This concept affects how React components update and re-render, impacting interaction responsiveness and rendering speed.
Passing data to child components and managing updates
React
function Parent() {
  const data = { value: 42 };
  return <Child data={data} />;
}

function Child({ data }) {
  // use props directly without copying to state
  return <div>{data.value}</div>;
}
Using props directly avoids extra state and re-renders, improving rendering speed and reducing memory use.
📈 Performance GainSingle render per update; avoids unnecessary re-renders and memory overhead.
Passing data to child components and managing updates
React
function Parent() {
  const [count, setCount] = React.useState(0);
  const data = { value: 42 };
  return <Child data={data} />;
}

function Child({ data }) {
  const [localData, setLocalData] = React.useState(data);
  // copies props to state unnecessarily
  return <div>{localData.value}</div>;
}
Copying props into state causes extra memory use and can lead to stale data or unnecessary re-renders.
📉 Performance CostTriggers extra re-renders and memory usage; can cause multiple renders per update.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Copy props to state unnecessarilyExtra virtual DOM nodes createdMultiple reflows per updateHigher paint cost due to repeated updates[X] Bad
Use props directly without copyingMinimal DOM operationsSingle reflow per updateLower paint cost[OK] Good
Frequent state updates without memoizationMany DOM updatesMany reflowsHigh paint cost[!] Bad
State updates with useCallback and memoOptimized DOM updatesReduced reflowsLower paint cost[OK] Good
Rendering Pipeline
Props and state changes trigger React's reconciliation process, leading to virtual DOM diffing, then real DOM updates causing layout and paint.
→Reconciliation
→Layout
→Paint
⚠️ BottleneckReconciliation and Layout stages are most expensive when state changes cause many re-renders.
Core Web Vital Affected
INP
This concept affects how React components update and re-render, impacting interaction responsiveness and rendering speed.
Optimization Tips
1Avoid copying props into state unless you need to modify the data locally.
2Use props for static or read-only data to reduce re-renders.
3Memoize callbacks and components to prevent unnecessary updates.
Performance Quiz - 3 Questions
Test your performance knowledge
Why is copying props into state usually a bad idea for performance?
AIt causes extra re-renders and memory use
BIt reduces the number of renders
CIt makes components load faster
DIt improves browser caching
DevTools: React DevTools and Chrome Performance panel
How to check: Use React DevTools Profiler to record interactions and see component re-renders; use Chrome Performance to check layout and paint times.
What to look for: Look for unnecessary re-renders in React DevTools and long layout or paint durations in Performance panel indicating inefficient state/props usage.

Practice

(1/5)
1. Which of the following best describes the difference between state and props in React?
easy
A. Props can change inside a component; state is fixed.
B. State is internal and can change; props are external and read-only.
C. State and props are both used to pass data from parent to child.
D. Props are used only for styling; state holds all data.

Solution

  1. Step 1: Understand what state is

    State is data managed inside a component that can change over time.
  2. Step 2: Understand what props are

    Props are data passed from a parent component to a child component and cannot be changed by the child.
  3. Final Answer:

    State is internal and can change; props are external and read-only. -> Option B
  4. Quick Check:

    State changes internally, props are read-only from parent [OK]
Hint: State changes inside; props come from outside [OK]
Common Mistakes:
  • Thinking props can be changed inside the child component
  • Confusing state as data passed from parent
  • Believing props hold styling only
2. Which of the following is the correct way to pass a prop named title with value "Hello" to a child component Header?
easy
A. <Header title="Hello" />
B. <Header {title: "Hello"} />
C. <Header title={Hello} />
D. <Header title: "Hello" />

Solution

  1. Step 1: Recall JSX syntax for passing props

    Props are passed as attributes inside the component tag, like HTML attributes.
  2. Step 2: Check correct syntax for string prop

    Use quotes around string values: title="Hello".
  3. Final Answer:

    <Header title="Hello" /> -> Option A
  4. Quick Check:

    Props use attribute syntax with quotes for strings [OK]
Hint: Use attribute="value" syntax for string props [OK]
Common Mistakes:
  • Using curly braces without variable for string
  • Using object-like syntax inside JSX tag
  • Using colon instead of equals sign
3. Consider this React component code:
function Counter({ initial }) {
  const [count, setCount] = React.useState(initial);
  return <div>Count: {count}</div>;
}

// Usage:
<Counter initial={5} />

What will be displayed when this component renders?
medium
A. Count: 0
B. Count: undefined
C. Count: 5
D. Count: initial

Solution

  1. Step 1: Understand prop usage

    The prop initial is passed with value 5 to the Counter component.
  2. Step 2: Understand state initialization

    The state count is initialized with initial, so count starts at 5.
  3. Final Answer:

    Count: 5 -> Option C
  4. Quick Check:

    State initialized from prop value 5 [OK]
Hint: State starts with prop value passed in [OK]
Common Mistakes:
  • Assuming state starts at 0 by default
  • Printing the prop name instead of value
  • Confusing undefined with missing prop
4. What is wrong with this React component code?
function Message(props) {
  props.text = "Hello";
  return <div>{props.text}</div>;
}
medium
A. You cannot assign a new value to props inside a component.
B. The return statement is missing parentheses.
C. The component should use state instead of props.
D. The component must be a class to modify props.

Solution

  1. Step 1: Understand props immutability

    Props are read-only and cannot be changed inside the component.
  2. Step 2: Identify the error in code

    Assigning props.text = "Hello" tries to modify props, which is not allowed.
  3. Final Answer:

    You cannot assign a new value to props inside a component. -> Option A
  4. Quick Check:

    Props are immutable inside components [OK]
Hint: Props are read-only; never assign to them [OK]
Common Mistakes:
  • Trying to change props directly
  • Confusing props with state
  • Thinking only class components can modify props
5. You want a component to display a counter that starts from a value passed by its parent and can be incremented by the user. Which approach correctly uses state and props?
hard
A. Modify the prop value directly when user clicks increment.
B. Keep counter value only in props and pass updated props from child to parent.
C. Use props only and update them inside the component.
D. Initialize state with the prop value; update state on user action; do not modify props.

Solution

  1. Step 1: Understand data flow

    Props provide initial data from parent; state holds data that changes inside the component.
  2. Step 2: Apply correct usage

    Initialize state with prop value, then update state on user actions. Props remain unchanged.
  3. Final Answer:

    Initialize state with the prop value; update state on user action; do not modify props. -> Option D
  4. Quick Check:

    State changes internally; props stay read-only [OK]
Hint: Use props for initial value, state for changes [OK]
Common Mistakes:
  • Trying to change props directly
  • Using props to hold changing data
  • Passing updated data from child to parent incorrectly
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