React 19 Compiler를 babel plugin으로 활성화했습니다. 기존 코드에서 useEffect 의존성 배열을 비워두거나 함수만 넣었던 패턴이 모두 경고 + 일부는 무한 루프로 빠집니다.
// 4 년 동안 잘 동작하던 코드
function Search({ query }: { query: string }) {
const fetchData = async () => {
const r = await fetch(`/api/search?q=${query}`)
setResults(await r.json())
}
useEffect(() => { fetchData() }, [query])
// ...
}
Compiler 켜고 나면 fetchData가 매번 새로 생성되는데, 어떤 케이스는 무한 루프, 어떤 케이스는 stale closure. Compiler가 자동 memoize하는 거 아니었나요?
전체 코드베이스 1,400개 컴포넌트인데 일일이 useCallback 감싸야 할까요?
환경: React 19.2, babel-plugin-react-compiler 1.0, Next.js 17
댓글 0