[React] v17 vs v18 update state batch
2022. 9. 8. 20:59ㆍ내가 만든 예제
동일한 코드 사용
import { useEffect, useLayoutEffect, useState } from "react";
export default function App() {
const [a, setA] = useState(0);
useEffect(() => {
setA((a) => {
console.log("first useEffect = " + a + "->" + 1);
return 1;
});
}, []);
useEffect(() => {
if (a === 2) {
setA((a) => {
console.log("secont useEffect = " + a + "->" + 3);
return 3;
});
}
}, [a]);
useLayoutEffect(() => {
setA((a) => {
console.log("useLayoutEffect = " + a + "->" + 2);
return 2;
});
}, []);
console.log("render", a);
return <div/>
}
React 18.2.0
React 17.0.1
state update 동작의 batch 처리에 따라 렌더링 횟수의 차이와 useEffect 호출 로직에 차이가 있음을 알 수 있다.
특히 second useEffect의 경우, if(a === 2) 라는 조건을 걸었음에도, 배치 처리로 인해 실행 시점의 a의 값이 1임을 알 수 있다.