Performance: Re-rendering behavior
This affects how often React updates the UI, impacting interaction responsiveness and CPU usage.
const Child = React.memo(function Child() { console.log('Child rendered'); return <div>Child component</div>; }); function Parent() { const [count, setCount] = React.useState(0); return ( <div> <button onClick={() => setCount(count + 1)}>Increment</button> <Child /> </div> ); }
function Parent() { const [count, setCount] = React.useState(0); return ( <div> <button onClick={() => setCount(count + 1)}>Increment</button> <Child /> </div> ); } function Child() { console.log('Child rendered'); return <div>Child component</div>; }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Parent state update triggers all children re-render | Many virtual DOM diffs | Multiple reflows if DOM changes | Higher paint cost due to updates | [X] Bad |
| Using React.memo to prevent unnecessary child re-renders | Minimal virtual DOM diffs | Single or no reflows if no DOM changes | Lower paint cost | [OK] Good |
| Passing new inline functions as props causing re-renders | Virtual DOM diffs triggered by prop changes | Reflows triggered if DOM updates | Increased paint cost | [X] Bad |
| Memoizing functions with useCallback to stabilize props | Reduced virtual DOM diffs | Fewer reflows | Reduced paint cost | [OK] Good |
setState or the setter from useState updates state and triggers re-rendering.setState or useState setter -> Option BuseState, e.g., setCount.this.state.count = 5 or count = 5 does not trigger re-render. Only calling setCount(5) updates state properly.function Counter() {
const [count, setCount] = React.useState(0);
console.log('Render:', count);
return (
<button onClick={() => setCount(count + 1)}>Count: {count}</button>
);
}setCount(count + 1), updating state and causing re-render.function Example() {
const [value, setValue] = React.useState(0);
function update() {
value = value + 1;
}
return <button onClick={update}>Value: {value}</button>;
}value = value + 1 directly, which changes a local variable but does not update React state or cause re-render.value does not update state or trigger re-render -> Option Acount to a child component. The child uses React.memo to avoid unnecessary re-renders. Which of these changes will cause the child to re-render?React.memo prevents re-render if props are shallowly equal. If props change, it re-renders.count means props equal, no re-render.count same.count value means props changed, triggers re-render.count value different from before -> Option CPass the test and this pattern moves unknown