Performance: Callback functions for state updates
This affects how React batches and schedules state updates, impacting interaction responsiveness and rendering efficiency.
const [count, setCount] = useState(0); // Good: use callback to get latest state function increment() { setCount(prevCount => prevCount + 1); }
const [count, setCount] = useState(0); // Bad: directly using state variable in setState function increment() { setCount(count + 1); }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Direct state update (setCount(count + 1)) | Multiple updates may cause repeated DOM changes | Multiple reflows if updates trigger layout changes | Higher paint cost due to extra renders | [X] Bad |
| Callback state update (setCount(prev => prev + 1)) | Batched updates reduce DOM changes | Single reflow for batched updates | Lower paint cost with fewer renders | [OK] Good |
useState?useState?prevCount => prevCount + 1, which is the correct callback form.function Counter() {
const [count, setCount] = React.useState(0);
function increment() {
setCount(prev => prev + 1);
}
return (
<button onClick={increment}>Count: {count}</button>
);
}increment which updates state by adding 1 to previous count.const [value, setValue] = React.useState(0);
function update() {
setValue(value + 1);
setValue(value + 1);
}value (0), so both set to 1.isOpen in React. Which is the best way to update it safely when the new state depends on the old state?prev => !prev ensures the toggle uses the latest state safely.Pass the test and this pattern moves unknown