스테일 클로저(Stale Closure) 문제
상태 변수값이 실시간으로 바뀌는게 아니라 뒤늦게 업데이트 되기에 발생하는 문제
예시
const [myname, setMyname] = useState<string>("woosub");
setMyname("wooooooo!!");
console.log("myname : " + myname)
myname : woosub
위 예시와 같이 코드를 작성했을 때
일반적인 상황에서는 myname : wooooooo!!
출력을 예상할 수 있으나
상태변수 myname 는 실시간으로 바뀌는게 아니라 뒤늦게 스케줄러를 통해 변경된다
이를 항상 주의하여야한다
예상했던 myname : wooooooo!!
출력을 원할 경우
useEffect 훅 사용
useEffect(() => {
if (myname === "wooooooo!!") {
console.log("myname : " + myname);
}
}, [myname]);
setMyname("wooooooo!!");
상태 업데이트 콜백 사용
setMyname((prev) => {
const newName = "wooooooo!!";
console.log("myname : " + newName);
return newName;
});
로컬 변수 사용
const newName = "wooooooo!!";
setMyname(newName);
console.log("myname : " + newName);