setState의 비동기적 특성
export default function App() {
const [value, setValue] = useState(0)
const onClick = () => {
setValue(value+1)
setValue(value+1)
setValue(value+1)
}
return (
<div className="App">
<button onClick={onClick}>+</button>
<h1>{value}</h1>
</div>
);
}
// A : 이번 렌더링의 초기(시작) state 값
// B : 저장하여 다음 렌더링에 사용될 state 값
// A = 0
setValue(value+1)
// ① B = A + 1 => 2
setValue(value+1)
// ② B = A + 1 => 2
setValue(value+1)
// ③ B = A + 1 => 2
setState 함수형 업데이트
export default function App() {
const [value, setValue] = useState(0)
const onClick = () => {
setValue(prev => prev+1)
setValue(prev => prev+1)
setValue(prev => prev+1)
}
return (
<div className="App">
<button onClick={onClick}>+</button>
<h1>{value}</h1>
</div>
);
}
// A : 이번 렌더링 초기(시작) state 값
// B : A 또는 이번 렌더링에서 업데이트된 값 / 다음 렌더링에 사용될 값
// C : 함수형 업데이트를 통해 생겨난 값
// A = 0
// B = A = 0
setValue(prev => prev+1)
// ①-1 : C = B + 1 => 1
// ①-2 : C 를 B 에 저장
setValue(prev => prev+1)
// ②-1 : C = B + 1 => 2
// ②-2 : C 를 B 에 저장
setValue(prev => prev+1)
// ③-1 : C = B + 1 => 3
// ③-2 : C 를 B 에 저장